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 +2/−2
- doc/hdoc/Control-Arrow-ArrowIO.html +1/−1
- doc/hdoc/Control-Arrow-ArrowIf.html +1/−1
- doc/hdoc/Control-Arrow-ArrowList.html +1/−1
- doc/hdoc/Control-Arrow-ArrowState.html +1/−1
- doc/hdoc/Control-Arrow-ArrowStrict.html +1/−1
- doc/hdoc/Control-Arrow-ArrowTree.html +75/−1
- doc/hdoc/Control-Arrow-IOListArrow.html +1/−1
- doc/hdoc/Control-Arrow-IOStateListArrow.html +1/−1
- doc/hdoc/Control-Arrow-ListArrow.html +1/−1
- doc/hdoc/Control-Arrow-ListArrows.html +1/−1
- doc/hdoc/Control-Arrow-StateListArrow.html +1/−1
- doc/hdoc/Control-Monad-MonadStateIO.html +0/−468
- doc/hdoc/Control-Strategies-DeepSeq.html +1/−1
- doc/hdoc/Data-AssocList.html +1/−1
- doc/hdoc/Data-Char-UTF8.html +1/−1
- doc/hdoc/Data-NavTree.html +1/−1
- doc/hdoc/Data-Tree-Class.html +1/−1
- doc/hdoc/Data-Tree-NTree-Filter.html +1/−1
- doc/hdoc/Data-Tree-NTree-TypeDefs.html +1/−1
- doc/hdoc/System-PipeOpen.html +0/−166
- doc/hdoc/Text-XML-HXT-Arrow-DTDProcessing.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-DocumentInput.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-DocumentOutput.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-Edit.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-GeneralEntitySubstitution.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-Namespace.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-ParserInterface.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-Pickle-DTD.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-Pickle-Schema.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-Pickle-Xml.html +307/−2
- doc/hdoc/Text-XML-HXT-Arrow-Pickle.html +380/−2
- doc/hdoc/Text-XML-HXT-Arrow-ProcessDocument.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-ReadDocument.html +62/−8
- doc/hdoc/Text-XML-HXT-Arrow-WriteDocument.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-XPath.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-XPathSimple.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-XmlArrow.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow-XmlIOStateArrow.html +190/−1
- doc/hdoc/Text-XML-HXT-Arrow-XmlRegex.html +1/−1
- doc/hdoc/Text-XML-HXT-Arrow.html +11/−1
- doc/hdoc/Text-XML-HXT-DOM-FormatXmlTree.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-Interface.html +11/−1
- doc/hdoc/Text-XML-HXT-DOM-IsoLatinTables.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-MimeTypeDefaults.html +143/−0
- doc/hdoc/Text-XML-HXT-DOM-MimeTypes.html +427/−0
- doc/hdoc/Text-XML-HXT-DOM-Namespace.html +0/−181
- doc/hdoc/Text-XML-HXT-DOM-NamespaceFilter.html +0/−431
- doc/hdoc/Text-XML-HXT-DOM-NamespacePredicates.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-QualifiedName.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-ShowXml.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-TypeDefs.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-UTF8Decoding.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-Unicode.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-Util.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-XmlKeywords.html +98/−297
- doc/hdoc/Text-XML-HXT-DOM-XmlNode.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM-XmlOptions.html +46/−1
- doc/hdoc/Text-XML-HXT-DOM-XmlState.html +0/−2903
- doc/hdoc/Text-XML-HXT-DOM-XmlTreeTypes.html +1/−1
- doc/hdoc/Text-XML-HXT-DOM.html +0/−139
- doc/hdoc/Text-XML-HXT-DTDValidation-AttributeValueValidation.html +1/−1
- doc/hdoc/Text-XML-HXT-DTDValidation-DTDValidation.html +1/−1
- doc/hdoc/Text-XML-HXT-DTDValidation-DocTransformation.html +1/−1
- doc/hdoc/Text-XML-HXT-DTDValidation-DocValidation.html +1/−1
- doc/hdoc/Text-XML-HXT-DTDValidation-IdValidation.html +1/−1
- doc/hdoc/Text-XML-HXT-DTDValidation-RE.html +1/−1
- doc/hdoc/Text-XML-HXT-DTDValidation-TypeDefs.html +1/−1
- doc/hdoc/Text-XML-HXT-DTDValidation-Validation.html +1/−1
- doc/hdoc/Text-XML-HXT-DTDValidation-XmlRE.html +1/−1
- doc/hdoc/Text-XML-HXT-IO-GetFILE.html +1/−1
- doc/hdoc/Text-XML-HXT-IO-GetHTTPCurl.html +0/−102
- doc/hdoc/Text-XML-HXT-IO-GetHTTPLibCurl.html +102/−0
- doc/hdoc/Text-XML-HXT-IO-GetHTTPNative.html +0/−102
- doc/hdoc/Text-XML-HXT-Parser-DTDProcessing.html +0/−346
- doc/hdoc/Text-XML-HXT-Parser-DefaultURI.html +0/−104
- doc/hdoc/Text-XML-HXT-Parser-HtmlParsec.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-HtmlParser.html +0/−358
- doc/hdoc/Text-XML-HXT-Parser-MainFunctions.html +0/−561
- doc/hdoc/Text-XML-HXT-Parser-ProtocolHandler.html +0/−104
- doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerFile.html +0/−104
- doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html +0/−104
- doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html +0/−104
- doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html +0/−104
- doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerUtil.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-TagSoup.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-XhtmlEntities.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-XmlCharParser.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-XmlDTDParser.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-XmlDTDTokenParser.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-XmlEntities.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-XmlInput.html +0/−628
- doc/hdoc/Text-XML-HXT-Parser-XmlParsec.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser-XmlTokenParser.html +1/−1
- doc/hdoc/Text-XML-HXT-Parser.html +0/−163
- doc/hdoc/Text-XML-HXT-RelaxNG-BasicArrows.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-CreatePattern.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-DataTypeLibMysql.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-DataTypeLibUtils.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-DataTypeLibraries.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-DataTypes.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-PatternFunctions.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-PatternToString.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-Schema.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-SchemaGrammar.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-Simplification.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-Unicode-Blocks.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-Unicode-CharProps.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-Utils.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-Validation.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-Validator.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-XmlSchema-DataTypeLibW3C.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-XmlSchema-Regex.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG-XmlSchema-RegexParser.html +1/−1
- doc/hdoc/Text-XML-HXT-RelaxNG.html +1/−1
- doc/hdoc/Text-XML-HXT-Validator-AttributeValueValidation.html +0/−204
- doc/hdoc/Text-XML-HXT-Validator-DTDValidation.html +0/−191
- doc/hdoc/Text-XML-HXT-Validator-DocTransformation.html +0/−152
- doc/hdoc/Text-XML-HXT-Validator-DocValidation.html +0/−152
- doc/hdoc/Text-XML-HXT-Validator-IdValidation.html +0/−155
- doc/hdoc/Text-XML-HXT-Validator-RE.html +0/−1109
- doc/hdoc/Text-XML-HXT-Validator-Validation.html +0/−187
- doc/hdoc/Text-XML-HXT-Validator-ValidationFilter.html +0/−363
- doc/hdoc/Text-XML-HXT-Validator-XmlRE.html +0/−834
- doc/hdoc/Text-XML-HXT-Version.html +102/−0
- doc/hdoc/Text-XML-HXT-XPath-NavTree.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath-XPathArithmetic.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath-XPathDataTypes.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath-XPathEval.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath-XPathFct.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath-XPathKeywords.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath-XPathParser.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath-XPathToNodeSet.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath-XPathToString.html +1/−1
- doc/hdoc/Text-XML-HXT-XPath.html +1/−1
- doc/hdoc/Text-XML-HXT-XSLT-Application.html +1/−1
- doc/hdoc/Text-XML-HXT-XSLT-Common.html +1/−1
- doc/hdoc/Text-XML-HXT-XSLT-Compilation.html +1/−1
- doc/hdoc/Text-XML-HXT-XSLT-CompiledStylesheet.html +1/−1
- doc/hdoc/Text-XML-HXT-XSLT-Names.html +1/−1
- doc/hdoc/Text-XML-HXT-XSLT-XsltArrows.html +1/−1
- doc/hdoc/doc-index-36.html +2/−2
- doc/hdoc/doc-index-38.html +2/−2
- doc/hdoc/doc-index-43.html +2/−2
- doc/hdoc/doc-index-46.html +2/−2
- doc/hdoc/doc-index-47.html +2/−2
- doc/hdoc/doc-index-58.html +2/−2
- doc/hdoc/doc-index-60.html +2/−2
- doc/hdoc/doc-index-62.html +2/−2
- doc/hdoc/doc-index-A.html +38/−14
- doc/hdoc/doc-index-B.html +2/−2
- doc/hdoc/doc-index-C.html +2/−2
- doc/hdoc/doc-index-D.html +10/−2
- doc/hdoc/doc-index-E.html +10/−2
- doc/hdoc/doc-index-F.html +2/−2
- doc/hdoc/doc-index-G.html +12/−12
- doc/hdoc/doc-index-H.html +10/−2
- doc/hdoc/doc-index-I.html +16/−8
- doc/hdoc/doc-index-K.html +2/−2
- doc/hdoc/doc-index-L.html +2/−2
- doc/hdoc/doc-index-M.html +44/−4
- doc/hdoc/doc-index-N.html +2/−2
- doc/hdoc/doc-index-O.html +2/−2
- doc/hdoc/doc-index-P.html +10/−10
- doc/hdoc/doc-index-Q.html +2/−2
- doc/hdoc/doc-index-R.html +10/−2
- doc/hdoc/doc-index-S.html +18/−2
- doc/hdoc/doc-index-T.html +11/−11
- doc/hdoc/doc-index-U.html +2/−2
- doc/hdoc/doc-index-V.html +2/−2
- doc/hdoc/doc-index-W.html +2/−2
- doc/hdoc/doc-index-X.html +63/−3
- doc/hdoc/doc-index-Z.html +2/−2
- doc/hdoc/doc-index.html +2/−2
- doc/hdoc/hxt.haddock binary
- doc/hdoc/index.html +62/−67
- doc/hdoc/src/Control-Arrow-ArrowTree.html +240/−230
- doc/hdoc/src/Control-Monad-MonadStateIO.html +0/−104
- doc/hdoc/src/System-PipeOpen.html +0/−70
- doc/hdoc/src/Text-XML-HXT-Arrow-DocumentInput.html +384/−329
- doc/hdoc/src/Text-XML-HXT-Arrow-Edit.html +12/−11
- doc/hdoc/src/Text-XML-HXT-Arrow-Pickle-Xml.html +637/−508
- doc/hdoc/src/Text-XML-HXT-Arrow-Pickle.html +178/−172
- doc/hdoc/src/Text-XML-HXT-Arrow-ProcessDocument.html +35/−37
- doc/hdoc/src/Text-XML-HXT-Arrow-ReadDocument.html +261/−229
- doc/hdoc/src/Text-XML-HXT-Arrow-XmlIOStateArrow.html +883/−841
- doc/hdoc/src/Text-XML-HXT-Arrow.html +27/−23
- doc/hdoc/src/Text-XML-HXT-DOM-Interface.html +13/−11
- doc/hdoc/src/Text-XML-HXT-DOM-MimeTypeDefaults.html +594/−0
- doc/hdoc/src/Text-XML-HXT-DOM-MimeTypes.html +123/−0
- doc/hdoc/src/Text-XML-HXT-DOM-Namespace.html +0/−64
- doc/hdoc/src/Text-XML-HXT-DOM-NamespaceFilter.html +0/−236
- doc/hdoc/src/Text-XML-HXT-DOM-XmlKeywords.html +337/−376
- doc/hdoc/src/Text-XML-HXT-DOM-XmlOptions.html +158/−146
- doc/hdoc/src/Text-XML-HXT-DOM-XmlState.html +0/−699
- doc/hdoc/src/Text-XML-HXT-DOM.html +0/−38
- doc/hdoc/src/Text-XML-HXT-IO-GetHTTPCurl.html +0/−179
- doc/hdoc/src/Text-XML-HXT-IO-GetHTTPLibCurl.html +249/−0
- doc/hdoc/src/Text-XML-HXT-IO-GetHTTPNative.html +0/−161
- doc/hdoc/src/Text-XML-HXT-Parser-DTDProcessing.html +0/−942
- doc/hdoc/src/Text-XML-HXT-Parser-DefaultURI.html +0/−59
- doc/hdoc/src/Text-XML-HXT-Parser-HtmlParser.html +0/−180
- doc/hdoc/src/Text-XML-HXT-Parser-MainFunctions.html +0/−468
- doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandler.html +0/−125
- doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandlerFile.html +0/−89
- doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html +0/−204
- doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html +0/−160
- doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html +0/−55
- doc/hdoc/src/Text-XML-HXT-Parser-TagSoup.html +453/−434
- doc/hdoc/src/Text-XML-HXT-Parser-XmlInput.html +0/−394
- doc/hdoc/src/Text-XML-HXT-Parser.html +0/−48
- doc/hdoc/src/Text-XML-HXT-Validator-AttributeValueValidation.html +0/−368
- doc/hdoc/src/Text-XML-HXT-Validator-DTDValidation.html +0/−638
- doc/hdoc/src/Text-XML-HXT-Validator-DocTransformation.html +0/−245
- doc/hdoc/src/Text-XML-HXT-Validator-DocValidation.html +0/−548
- doc/hdoc/src/Text-XML-HXT-Validator-IdValidation.html +0/−279
- doc/hdoc/src/Text-XML-HXT-Validator-RE.html +0/−340
- doc/hdoc/src/Text-XML-HXT-Validator-Validation.html +0/−75
- doc/hdoc/src/Text-XML-HXT-Validator-ValidationFilter.html +0/−136
- doc/hdoc/src/Text-XML-HXT-Validator-XmlRE.html +0/−115
- doc/hdoc/src/Text-XML-HXT-Version.html +14/−0
- doc/index.html +38/−7
- examples/arrows/AGentleIntroductionToHXT/AGentleIntroductionToHXT/PicklerExample/Baseball. +0/−313
- examples/arrows/AGentleIntroductionToHXT/AGentleIntroductionToHXT/PicklerExample/Football. +0/−313
- examples/arrows/AGentleIntroductionToHXT/AGentleIntroductionToHXT/PicklerExample/Makefile +0/−41
- examples/arrows/AGentleIntroductionToHXT/Makefile +9/−5
- examples/arrows/AGentleIntroductionToHXT/PicklerExample/Baseball.hs +313/−0
- examples/arrows/AGentleIntroductionToHXT/PicklerExample/Makefile +41/−0
- examples/arrows/AGentleIntroductionToHXT/PicklerExample/new-simple2.xml +60/−0
- examples/arrows/AGentleIntroductionToHXT/PicklerExample/simple2.xml +103/−0
- hxt.cabal +7/−6
- src/Control/Arrow/ArrowTree.hs +10/−0
- src/Makefile +15/−3
- src/System/PipeOpen.hs +0/−60
- src/Text/XML/HXT/Arrow.hs +4/−0
- src/Text/XML/HXT/Arrow/DocumentInput.hs +100/−45
- src/Text/XML/HXT/Arrow/Edit.hs +5/−4
- src/Text/XML/HXT/Arrow/Pickle.hs +6/−0
- src/Text/XML/HXT/Arrow/Pickle/Xml.hs +131/−2
- src/Text/XML/HXT/Arrow/ProcessDocument.hs +1/−3
- src/Text/XML/HXT/Arrow/ReadDocument.hs +58/−26
- src/Text/XML/HXT/Arrow/XmlIOStateArrow.hs +45/−3
- src/Text/XML/HXT/DOM/Interface.hs +2/−0
- src/Text/XML/HXT/DOM/MimeTypeDefaults.hs +584/−0
- src/Text/XML/HXT/DOM/MimeTypes.hs +113/−0
- src/Text/XML/HXT/DOM/XmlKeywords.hs +6/−45
- src/Text/XML/HXT/DOM/XmlOptions.hs +18/−6
- src/Text/XML/HXT/IO/GetHTTPCurl.hs +0/−169
- src/Text/XML/HXT/IO/GetHTTPLibCurl.hs +239/−0
- src/Text/XML/HXT/IO/GetHTTPNative.hs +0/−151
- src/Text/XML/HXT/Parser/TagSoup.hs +27/−8
- src/Text/XML/HXT/ProtocolHandler/Makefile +0/−45
- src/Text/XML/HXT/ProtocolHandler/ProtocolHandler.hs +0/−115
- src/Text/XML/HXT/Version.hs +4/−0
- src/hxt-package.hs +3/−3
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 => b -> 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 => b -> [t b] -> 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 => b -> 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 => b -> [t b] -> 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 -> 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 -> <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 -> String) -> <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 -> state) -> <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 -> <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 -> <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"->StateIO</A-> state res -> 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 -> 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 -> <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 -> String) -> <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 "show"-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 -> state) -> <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 -> <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 -> <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"->StateIO</A-> state res -> 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
@@ -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 -> [String] -> 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 -> [String] -> 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 => a -> <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a -> <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 => String -> String -> <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> k -> <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> v -> <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 -> Int) -> [<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 -> String -> String -> <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a -> <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 -> <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 => a -> <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a -> <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 => String -> String -> <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> k -> <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> v -> <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 "number" $ xpickle+</PRE+><P+>will map an (42::Int) onto+</P+><PRE+> <number>42</number>+</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 -> String -> String -> <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a -> <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+> <attr name="key1">value1</attr>+ <attr name="key2">value2</attr>+ <attr name="key3">value3</attr>+</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 -> (key1 t, key2 t, key3 t) ) $+ xpTriple (xpElemWithAttrValue "attr" "name" "key1" $ xpickle)+ (xpElemWithAttrValue "attr" "name" "key2" $ xpText0)+ (xpElemWithAttrValue "attr" "name" "key3" $ 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 -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> b -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> c -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> d -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> e -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> f -> <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 -> String -> <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 => a -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -> <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 -> <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 -> String -> String -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -> <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 => String -> String -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> k -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> v -> <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 -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> b -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> c -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> d -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> e -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> f -> <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 => a -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -> <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 "number" $ xpickle+</PRE+><P+>will map an (42::Int) onto+</P+><PRE+> <number>42</number>+</PRE ></TD ></TR ><TR@@ -1955,6 +2147,67 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AxpElemWithAttrValue"+></A+><B+>xpElemWithAttrValue</B+> :: String -> String -> String -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -> <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+> <attr name="key1">value1</attr>+ <attr name="key2">value2</attr>+ <attr name="key3">value3</attr>+</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 -> (key1 t, key2 t, key3 t) ) $+ xpTriple (xpElemWithAttrValue "attr" "name" "key1" $ xpickle)+ (xpElemWithAttrValue "attr" "name" "key2" $ xpText0)+ (xpElemWithAttrValue "attr" "name" "key3" $ 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 => String -> String -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> k -> <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> v -> <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 "mime.types" 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, "0") , (a_encoding, isoLatin1)- ] "test.xml"+ , (a_parse_by_mimetype, "1")+ ] "http://localhost/test.php" </PRE ><P->reads document "test.xml" without validation, default encoding <TT+>reads document "test.php", 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, "1") , (a_encoding, isoLatin1)- , (a_tagsoup, "1") ] "" </PRE ><P@@ -439,6 +479,20 @@ ></TT >, parsing is done with tagsoup parser+</P+><PRE+> readDocument [ (a_encoding, isoLatin1)+ , (a_mime_type, "/etc/mime.types")+ , (a_tagsoup, "1")+ ] "test.svg"+</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, "1")
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 -> String -> <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"@@ -1127,6 +1154,32 @@ >ArrowList</A > a => 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+> -> <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 -> <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+> -> <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 -> <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 -> 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 -> 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 -> <A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>MimeTypeTable</A+> -> 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 -> 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 -> [(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 "/" 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 "")- 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-> -> 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 "xmlns:ns=..." 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-> -> 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 -> Bool</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AisXmlMimeType"->isXmlMimeType</A-> :: String -> 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 -> 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 -> 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 > -> Bool</TD ></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl"+><A HREF="#v%3AisTrueValue"+>isTrueValue</A+> :: String -> Bool</TD+></TR ></TABLE ></TD ></TR@@ -578,6 +588,41 @@ and checks if the value represents True. The following strings are interpreted as true: "1", "True", "true", "yes", "Yes". </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 -> 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` ["1", "True", "true", "Yes", "yes"])+</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 -> <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 -> state) -> <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 -> <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-> -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"->SysState</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%3AsetSysState"->setSysState</A-> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"->SysState</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%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-> -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"->SysStateAttrs</A->) -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"->SysState</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%3AsetSysErrorHandler"->setSysErrorHandler</A-> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"->XmlStateFilter</A-> () -> <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 -> XmlTrees -> <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 -> String -> <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 -> Int -> <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 -> <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 -> <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 -> String -> <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 -> Int -> <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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state res -> 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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state res -> 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 -> IO res</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Achain%27"->chain'</A-> :: state1 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state1 res -> <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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state1 res -> <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 -> <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 -> <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 -> <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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state a -> <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 -> String -> <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 -> (state -> String) -> <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 -> String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AissueWarn"->issueWarn</A-> :: String -> <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 -> <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 -> <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 -> <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 -> String -> 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 -> <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 -> <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 -> <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 -> state) -> <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 -> <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-> -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"->SysState</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-><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-> -> <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-> -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"->SysStateAttrs</A->) -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"->SysState</A-> -> <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-> () -> <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 -> XmlTrees -> <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 -> String -> <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 -> Int -> <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 -> <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 -> <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 -> String -> <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 -> Int -> <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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state res -> 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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state res -> 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 -> 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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state1 res -> <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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state1 res -> <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 -> <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 -> <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 -> <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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state a -> <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 <= 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 -> String -> <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 -> (state -> String) -> <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 -> 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 -> <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 -> <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 -> <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 -> <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 -> String -> 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 -> <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 -> <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 -> String -> String -> 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)] -> String -> 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 -> String -> 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-> .>> <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 <- getWellformedDoc $ newDocument "myfile.xml"- ...- </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 -> 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 -> 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 -> String -> IO (XmlTree, XmlTrees, Int)</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AputXmlDocument"->putXmlDocument</A-> :: Attributes -> String -> XmlTree -> IO (XmlTrees, Int)</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AparseDocument"->parseDocument</A-> :: Attributes -> <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 -> <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 -> String -> 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) <- getXmlDocument [] "test.xml"- if rc >= c_err- then issueErrors errs- else processTree res-- issueErrors :: XmlTrees -> IO ()-- processTree :: XmlTree -> 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 -> String -> XmlTree -> 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) <- getXmlDocument [...] "test.xml"- if rc >= c_err- then issueErrors readErrs- else processTree input-- processTree :: XmlTree -> IO ()- processTree t- = let res = computeNewTree input- in do- (writeErrs, rc2) <- putXmlDocument [...] "out.xml" res- if rc2 >= c_err- then issueErrors writeErrs- else return ()-- issueErrors :: XmlTrees -> IO ()-- computeNewTree :: XmlTree -> XmlTree-</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 -> <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, "test.xml")- , (a_validate, "0")- , (a_encoding, isoLatin1)- ] emptyRoot-</PRE-><P->reads document "test.xml" without validation and default encoding isoLatin1-</P-><PRE-> parseDocument [ (a_source, "http://www.haskell.org/")- , (a_parse_html, "1")- , (a_proxy, "www-cache:3128")- , (a_curl, "1")- , (a_issue_warnings, "0")- ] emptyRoot-</PRE-><P->reads Haskell homepage with HTML parser ignoring any warnings and with http access via external program curl and proxy "www-cache" at port 3128-</P-><PRE-> parseDocument [ (a_source, "http://www.w3c.org/")- , (a_parse_html, "0") -- default- , (a_validate, "1") -- default- , (a_check_namespace, "1")- , (a_remove_whitespace, "1")- , (a_trace, "2")- ] emptyRoot-</PRE-><P->read w3c home page, validate and chech namespaces, remove whitespace between tags, trace activities with level 2-</P-><PRE-> parseDocument [ (a_source, "test.xml")- , (a_validate, "1")- , (a_check_namespace, "1")- , (a_collect_errors, "1")- , (a_issue_errors, "0")- ] emptyRoot-</PRE-><P->reads file "test.xml", validates it, checks namespaces, does not issue any erros- but collects errors and appends the list of errors to the single element list for the document.- this enables the calling application to define own error handlers.-</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 -> <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 "-" 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 >,<,",',&- 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 <- getArgs -- get the commandline arguments- (inp, outp, options) <- cmdlineOpts argv -- and evaluate them, return a key-value list- -- and input and output- res <- run' $ application inp outp options $ emptyRoot -- run the application- - exitWith (if null res- then ExitFailure (-1)- else exitSuccess- )-- application :: String -> String -> Attributes -> XmlStateFilter ()- application inp outp al- = parseDocument (al ++ [(a_source, inp)]) -- set options and source- .>> -- and parse document- processDocument -- the hard work- .>>- writeDocument [(a_output_file, outp)] -- issue results- .>>- checkStatus -- check errors--</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 -> URI -> <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 -> <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 -> <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 -> <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 -> <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 -> <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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"->XmlStateFilter</A-> 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%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 -> <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 -> <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 -> <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 -> <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"->XmlStateFilter</A-> a -> <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 -> <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:///<current-working-dir>/</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 -> <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 "" 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 -> XmlTree -> XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AnormalizeAttributeValue"->normalizeAttributeValue</A-> :: Maybe XmlTree -> 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%3AcheckAttributeValue"-></A-><B->checkAttributeValue</B-> :: XmlTrees -> XmlTree -> 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 -> String -> 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 -> XmlTree -> 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 -> XmlTree -> 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 -> XmlTree -> 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 -> XmlTree -> 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 -> XmlTree -> 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 -> XmlTree -> 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 -> <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 -> <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 -> <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 -> <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 -> <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 -> <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="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 -> <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="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 => <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a -> String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Amatches"->matches</A-> :: (Eq a, Show a) => <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a -> [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%3Anullable"->nullable</A-> :: Show a => <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a -> Bool</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AprintRE"->printRE</A-> :: Show a => <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a -> 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 => Eq (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a)</TD-></TR-><TR-><TD CLASS="decl"->Show a => 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 -> <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 -> <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 -> <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 -> <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 -> <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 -> <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="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 -> <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="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 => <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a -> 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?- -> 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) => <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a -> [a] -> <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 => <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a -> 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 => <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"->RE</A-> a -> 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 => <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> a -> 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 -> XmlTrees -> <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 => <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> a -> 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 -> <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 -> <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 -> <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 -> <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 -> <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 -> <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> 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_alt"->re_alt</A-> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> a -> <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> 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_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 => Eq (<A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> a)</TD-></TR-><TR-><TD CLASS="decl"->Show a => 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 => <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> a -> 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?- -> 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 -> XmlTrees -> <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 => <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> a -> 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 -> <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 -> <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 -> <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 -> <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 -> <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 -> <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> a -> <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 -> <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"->RE</A-> a -> <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+>
@@ -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'>=></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'>=></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'>=></span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>=></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'>=></span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>=></span> <span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>=></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'>=></span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>=></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'>=></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'>-></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'>-></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'>=></span> <span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>=></span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>=></span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>=></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'>-></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'>&&&</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'>>>></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'>>>></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'>=></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'>-></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'>&&&</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'>>>></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 \/> g = f >>> getChildren >>> g @</span>-<a name="line-108"></a> <span class='comment'>--</span>-<a name="line-109"></a> <span class='comment'>-- example: @ hasName \"html\" \/> hasName \"body\" \/> 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'>/></span><span class='layout'>)</span> <span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=></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'>-></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'>-></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'>/></span> <span class='varid'>g</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'>>>></span> <span class='varid'>getChildren</span> <span class='varop'>>>></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 \<\/ g = f \`containing\` (getChildren >>> g) @</span>-<a name="line-123"></a>-<a name="line-124"></a> <span class='layout'>(</span><span class='varop'></</span><span class='layout'>)</span> <span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=></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'>-></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'>-></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'></</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'>>>></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'>=></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'>-></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'>-></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'>=></span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>=></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'>-></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'>&&&</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'>>>></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'>>>></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'>=></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'>-></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'>&&&</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'>>>></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 \/> g = f >>> getChildren >>> g @</span>+<a name="line-118"></a> <span class='comment'>--</span>+<a name="line-119"></a> <span class='comment'>-- example: @ hasName \"html\" \/> hasName \"body\" \/> 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'>/></span><span class='layout'>)</span> <span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=></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'>-></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'>-></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'>/></span> <span class='varid'>g</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'>>>></span> <span class='varid'>getChildren</span> <span class='varop'>>>></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'>=></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'>-></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'>>>></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'>=></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'>-></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'>>>></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'>=></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'>-></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'><+></span>-<a name="line-163"></a> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>>>></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 \<\/ g = f \`containing\` (getChildren >>> g) @</span>+<a name="line-133"></a>+<a name="line-134"></a> <span class='layout'>(</span><span class='varop'></</span><span class='layout'>)</span> <span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=></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'>-></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'>-></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'></</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'>>>></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'>=></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'>-></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'>>>></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'>=></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'>-></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'>>>></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'>=></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'>-></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'>>>></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'>=></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'>-></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'>>>></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'>=></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'>-></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'><+></span>+<a name="line-173"></a> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>>>></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'>=></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'>-></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'>>>></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'>=></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'>-></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'>-></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'>>>></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'>=></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'>-></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'>=></span> <span class='conid'>Int</span> <span class='keyglyph'>-></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'>-></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'>&&&</span> <span class='varid'>this</span> <span class='varop'>>>></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'>-></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'>=></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'>-></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'>-></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'>>>></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'>&&&</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'>>>></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'>-></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'>-- > insertTreeTemplateTest :: ArrowXml a => a b XmlTree</span>-<a name="line-249"></a> <span class='comment'>-- > insertTreeTemplateTest</span>-<a name="line-250"></a> <span class='comment'>-- > = doc</span>-<a name="line-251"></a> <span class='comment'>-- > >>></span>-<a name="line-252"></a> <span class='comment'>-- > insertTemplate template pattern</span>-<a name="line-253"></a> <span class='comment'>-- > where</span>-<a name="line-254"></a> <span class='comment'>-- > doc -- the input data</span>-<a name="line-255"></a> <span class='comment'>-- > = constA "<x><y>The Title</y><z>The content</z></x>"</span>-<a name="line-256"></a> <span class='comment'>-- > >>> xread</span>-<a name="line-257"></a> <span class='comment'>-- > template -- the output template with 2 holes: xxx and yyy</span>-<a name="line-258"></a> <span class='comment'>-- > = constA "<html><head><title>xxx</title></head><body><h1>yyy</h1></body></html>"</span>-<a name="line-259"></a> <span class='comment'>-- > >>> xread</span>-<a name="line-260"></a> <span class='comment'>-- > pattern</span>-<a name="line-261"></a> <span class='comment'>-- > = [ hasText (== "xxx") -- fill the xxx hole with the input contents from element "x/y"</span>-<a name="line-262"></a> <span class='comment'>-- > :-> ( getChildren >>> hasName "y" >>> deep isText )</span>-<a name="line-263"></a> <span class='comment'>-- > </span>-<a name="line-264"></a> <span class='comment'>-- > , hasText (== "yyy") -- fill the yyy hole with the input contents from element "x/z"</span>-<a name="line-265"></a> <span class='comment'>-- > :-> ( getChildren >>> hasName "z" >>> getChildren )</span>-<a name="line-266"></a> <span class='comment'>-- > ]</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'>-- > "<html><head><title>The Title</title></head><body><h1>The content</h1></body></html>"</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'>=></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'>-></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'>-></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'>$<</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'>>>></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'>:-></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'>:-></span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='varid'>t</span> <span class='varop'>>>></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'>=></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'>-></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'>>>></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'>=></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'>-></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'>-></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'>>>></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'>=></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'>-></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'>=></span> <span class='conid'>Int</span> <span class='keyglyph'>-></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'>-></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'>&&&</span> <span class='varid'>this</span> <span class='varop'>>>></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'>-></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'>=></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'>-></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'>-></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'>>>></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'>&&&</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'>>>></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'>-></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'>-- > insertTreeTemplateTest :: ArrowXml a => a b XmlTree</span>+<a name="line-259"></a> <span class='comment'>-- > insertTreeTemplateTest</span>+<a name="line-260"></a> <span class='comment'>-- > = doc</span>+<a name="line-261"></a> <span class='comment'>-- > >>></span>+<a name="line-262"></a> <span class='comment'>-- > insertTemplate template pattern</span>+<a name="line-263"></a> <span class='comment'>-- > where</span>+<a name="line-264"></a> <span class='comment'>-- > doc -- the input data</span>+<a name="line-265"></a> <span class='comment'>-- > = constA "<x><y>The Title</y><z>The content</z></x>"</span>+<a name="line-266"></a> <span class='comment'>-- > >>> xread</span>+<a name="line-267"></a> <span class='comment'>-- > template -- the output template with 2 holes: xxx and yyy</span>+<a name="line-268"></a> <span class='comment'>-- > = constA "<html><head><title>xxx</title></head><body><h1>yyy</h1></body></html>"</span>+<a name="line-269"></a> <span class='comment'>-- > >>> xread</span>+<a name="line-270"></a> <span class='comment'>-- > pattern</span>+<a name="line-271"></a> <span class='comment'>-- > = [ hasText (== "xxx") -- fill the xxx hole with the input contents from element "x/y"</span>+<a name="line-272"></a> <span class='comment'>-- > :-> ( getChildren >>> hasName "y" >>> deep isText )</span>+<a name="line-273"></a> <span class='comment'>-- > </span>+<a name="line-274"></a> <span class='comment'>-- > , hasText (== "yyy") -- fill the yyy hole with the input contents from element "x/z"</span>+<a name="line-275"></a> <span class='comment'>-- > :-> ( getChildren >>> hasName "z" >>> getChildren )</span>+<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'>-- 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'>-- > "<html><head><title>The Title</title></head><body><h1>The content</h1></body></html>"</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'>=></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'>-></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'>-></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'>$<</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'>>>></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'>:-></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'>:-></span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='varid'>t</span> <span class='varop'>>>></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'>-></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'>-></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'>>>=</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'>-></span>-<a name="line-24"></a> <span class='varid'>cmd</span> <span class='varid'>s</span> <span class='varop'>>>=</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'>-></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'>-></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'>-></span>-<a name="line-35"></a> <span class='keyword'>do</span>-<a name="line-36"></a> <span class='varid'>a</span> <span class='keyglyph'><-</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'>-></span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='varid'>state</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>StateIO</span> <span class='varid'>state</span> <span class='varid'>res</span> <span class='keyglyph'>-></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'><-</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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'><-</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'><-</span> <span class='varid'>hGetContents</span> <span class='varid'>outH</span>-<a name="line-46"></a> <span class='varid'>errs</span> <span class='keyglyph'><-</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'><-</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'>-></span> <span class='num'>0</span>-<a name="line-57"></a> <span class='conid'>ExitFailure</span> <span class='varid'>i</span> <span class='keyglyph'>-></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'>-></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'>>>></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'>>>></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'>>>></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'>$<</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>-<a name="line-90"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>>>></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'>></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'>>>></span>-<a name="line-113"></a> <span class='varid'>getPathFromURI</span>-<a name="line-114"></a> <span class='varop'>>>></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'>>>></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'>-></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'>>>></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'>-></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'>>>></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'>-></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'>>>></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'>>>></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'>$<<<<</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>-<a name="line-150"></a> <span class='varop'>&&&</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'>&&&</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'>&&&</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'>>>></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'>>>></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'>-></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'>>>></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'>>>></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'>$<</span> <span class='varid'>getBaseURI</span>-<a name="line-206"></a> <span class='varop'>>>></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'>$<</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>-<a name="line-211"></a> <span class='varop'>>>^</span>-<a name="line-212"></a> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>src</span><span class='keyglyph'>-></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 -> 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'>>>></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'>>>></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'>-></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'>>>></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'>>>></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'>>>></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'>$<</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>+<a name="line-95"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>>>></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'>></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'>>>></span>+<a name="line-118"></a> <span class='varid'>getPathFromURI</span>+<a name="line-119"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>-></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'>>>></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'>-></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'>>>></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'>$<</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>+<a name="line-149"></a> <span class='varop'>>>></span>+<a name="line-150"></a> <span class='layout'>(</span> <span class='varid'>uriToMime</span> <span class='varop'>$<</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'>-></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'>-></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'>>>></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'>>>></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'>$<<</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>+<a name="line-169"></a> <span class='varop'>&&&</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'>&&&</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'>>>^</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'>>>></span> <span class='layout'>(</span> <span class='varid'>getName</span>+<a name="line-181"></a> <span class='varop'>&&&</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'>>>></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'>>>></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> >>>+<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> >>>+<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'>>>></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'>>>></span>-<a name="line-232"></a> <span class='varid'>getSchemeFromURI</span>-<a name="line-233"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>>>></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'>>>></span>-<a name="line-281"></a> <span class='varid'>processChildren</span> <span class='varid'>removeEncodingSpec</span>-<a name="line-282"></a> <span class='varop'>>>></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'>-></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'>>>></span>-<a name="line-289"></a> <span class='varid'>parseEncodingSpec</span>-<a name="line-290"></a> <span class='varop'>>>></span>-<a name="line-291"></a> <span class='varid'>filterErrorMsg</span>-<a name="line-292"></a> <span class='varop'>>>></span>-<a name="line-293"></a> <span class='varid'>decodeDocument</span>-<a name="line-294"></a> <span class='varop'>>>></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'>>>></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'>>>></span>-<a name="line-300"></a> <span class='varid'>traceTree</span>-<a name="line-301"></a> <span class='varop'>>>></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'>-></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'>>>></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'>>>></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'>$<</span> <span class='varid'>getBaseURI</span>+<a name="line-246"></a> <span class='varop'>>>></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'>$<</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>+<a name="line-251"></a> <span class='varop'>>>^</span>+<a name="line-252"></a> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>src</span><span class='keyglyph'>-></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 -> 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'>>>></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'>>>></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'>>>></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'>>>></span>+<a name="line-272"></a> <span class='varid'>getSchemeFromURI</span>+<a name="line-273"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>>>></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'>>.</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'>$<</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'>>>></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'>>>^</span> <span class='varid'>map</span> <span class='varid'>toLower</span> <span class='layout'>)</span>-<a name="line-330"></a> <span class='varop'>>>></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'>-></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'>-></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'>>>></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'>>>></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'>>>></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'>>>></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'>>>></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'>^>></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'><+></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'>>>></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'>>>></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'>>>></span>-<a name="line-360"></a> <span class='varid'>none</span> <span class='comment'>-- neccessary for type match with <+></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'>>>></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'>>>></span>+<a name="line-321"></a> <span class='varid'>processChildren</span> <span class='varid'>removeEncodingSpec</span>+<a name="line-322"></a> <span class='varop'>>>></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'>-></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'>>>></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'>>>></span>+<a name="line-331"></a> <span class='varid'>filterErrorMsg</span>+<a name="line-332"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>>>></span>+<a name="line-344"></a> <span class='varid'>traceTree</span>+<a name="line-345"></a> <span class='varop'>>>></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'>>>></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'>-></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'>>>></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'>>.</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'>$<</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'>>>></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'>>>^</span> <span class='varid'>map</span> <span class='varid'>toLower</span> <span class='layout'>)</span>+<a name="line-379"></a> <span class='varop'>>>></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'>-></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'>-></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'>>>></span>+<a name="line-389"></a> <span class='layout'>(</span> <span class='varid'>decodeText</span> <span class='varid'>df</span> <span class='varop'>$<</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'>>>></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'>>>></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'>>>></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'>>>></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'>^>></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'><+></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'>>>></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'>>>></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'>>>></span>+<a name="line-413"></a> <span class='varid'>none</span> <span class='comment'>-- neccessary for type match with <+></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'><+></span>-<a name="line-745"></a> <span class='varid'>txt</span> <span class='str'>"\n"</span>-<a name="line-746"></a> <span class='varop'><+></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'><+></span>+<a name="line-746"></a> <span class='varid'>txt</span> <span class='str'>"\n"</span>+<a name="line-747"></a> <span class='varop'><+></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'>-></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'>-></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'>-></span> <span class='conid'>St</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>St</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>St</span> <span class='keyglyph'>-></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'>>>></span>-<a name="line-81"></a> <span class='varid'>isAttr</span> <span class='varop'>>>></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'>-></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'>-></span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>Maybe</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>e</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>e</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>f</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'><-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>-<a name="line-294"></a> <span class='varid'>s</span> <span class='keyglyph'><-</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'>-></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'>=></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'>=></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></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'><-</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'>-></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'>-></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'>-></span> <span class='varid'>st</span>-<a name="line-362"></a> <span class='conid'>Just</span> <span class='varid'>x</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='keyglyph'>[</span><span class='conid'>PU</span> <span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>-></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'><-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>-<a name="line-449"></a> <span class='varid'>n</span> <span class='keyglyph'><-</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'><-</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'><-</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'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>-></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'><-</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'><-</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'>-></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='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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>=></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'>=></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'>=></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'>=></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'>=></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'>=></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'>-></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'>-></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'>-></span> <span class='conid'>St</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>St</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>St</span> <span class='keyglyph'>-></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'>>>></span>+<a name="line-84"></a> <span class='varid'>isAttr</span> <span class='varop'>>>></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'>-></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'>-></span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>Maybe</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>e</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>e</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>f</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'><-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>+<a name="line-297"></a> <span class='varid'>s</span> <span class='keyglyph'><-</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'>-></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'>=></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'>=></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></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'><-</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'>-></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'>-></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'>-></span> <span class='varid'>st</span>+<a name="line-389"></a> <span class='conid'>Just</span> <span class='varid'>x</span> <span class='keyglyph'>-></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'>=></span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>=></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>k</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>v</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='keyglyph'>[</span><span class='conid'>PU</span> <span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-- > 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'>-- > <number>42</number></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'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>-></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'><-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>+<a name="line-521"></a> <span class='varid'>n</span> <span class='keyglyph'><-</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'><-</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'><-</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'>-- > <attr name="key1">value1</attr></span>+<a name="line-540"></a><span class='comment'>-- > <attr name="key2">value2</attr></span>+<a name="line-541"></a><span class='comment'>-- > <attr name="key3">value3</attr></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'>-- > 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'>-- > xpT :: PU T</span>+<a name="line-550"></a><span class='comment'>-- > xpT = xpWrap ( uncurry3 T, \ t -> (key1 t, key2 t, key3 t) ) $</span>+<a name="line-551"></a><span class='comment'>-- > xpTriple (xpElemWithAttrValue "attr" "name" "key1" $ xpickle)</span>+<a name="line-552"></a><span class='comment'>-- > (xpElemWithAttrValue "attr" "name" "key2" $ xpText0)</span>+<a name="line-553"></a><span class='comment'>-- > (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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>-></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'>>>></span>+<a name="line-570"></a> <span class='varid'>hasName</span> <span class='varid'>name</span>+<a name="line-571"></a> <span class='varop'>>>></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'><-</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'><-</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'><-</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'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>-></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'><-</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'><-</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'>-></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='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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>=></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'>=></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'>=></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'>=></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'>=></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'>=></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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>>>></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'>>>></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'>>>></span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span> <span class='varop'>>>></span> <span class='varid'>getChildren</span><span class='layout'>)</span>-<a name="line-128"></a> <span class='varop'><+></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'>>>></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 >>> 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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>>>></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'>>>></span>-<a name="line-157"></a> <span class='varid'>xunpickleVal</span> <span class='varid'>xp</span>-<a name="line-158"></a> <span class='varop'>>>></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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></span> <span class='conid'>String</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-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'>>>></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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>>>></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'>>>></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'>>>></span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span> <span class='varop'>>>></span> <span class='varid'>getChildren</span><span class='layout'>)</span>+<a name="line-134"></a> <span class='varop'><+></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'>>>></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 >>> 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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>>>></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'>>>></span>+<a name="line-163"></a> <span class='varid'>xunpickleVal</span> <span class='varid'>xp</span>+<a name="line-164"></a> <span class='varop'>>>></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'>-></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'>>>></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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></span> <span class='conid'>String</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-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'>>>></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'>=></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>>>></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'>>>></span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span> <span class='varop'>>>></span> <span class='varid'>getChildren</span><span class='layout'>)</span>-<a name="line-195"></a> <span class='varop'><+></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'>>>></span>-<a name="line-199"></a> <span class='varid'>writeDocumentToString</span> <span class='conid'>[]</span>-<a name="line-200"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>&&&</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'>>>></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'>=></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>=></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>-></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'>>>></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'>=></span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>>>></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'>>>></span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span> <span class='varop'>>>></span> <span class='varid'>getChildren</span><span class='layout'>)</span>+<a name="line-201"></a> <span class='varop'><+></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'>>>></span>+<a name="line-205"></a> <span class='varid'>writeDocumentToString</span> <span class='conid'>[]</span>+<a name="line-206"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>&&&</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'>>>></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'>=></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>-></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'>=></span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-></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'>-></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'>>>></span> <a name="line-244"></a> <span class='varid'>propagateNamespaces</span> <a name="line-245"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>>>></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'>>>></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'>>>></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'>>>></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'>>>></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'>-></span> <span class='conid'>String</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-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'>-></span> <span class='conid'>String</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-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'>>>></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'>>>></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'>>>></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'>>>></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'>>>></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'>>>></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'>>>></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>> 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>> readDocument [ (a_validate, "0")-<a name="line-122"></a>> , (a_encoding, isoLatin1)-<a name="line-123"></a>> ] "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>> readDocument [ (a_parse_html, "1")-<a name="line-129"></a>> , (a_encoding, isoLatin1)-<a name="line-130"></a>> , (a_tagsoup, "1")-<a name="line-131"></a>> ] ""+<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>> readDocument [ (a_parse_html, "1")-<a name="line-137"></a>> , (a_proxy, "www-cache:3128")-<a name="line-138"></a>> , (a_curl, "1")-<a name="line-139"></a>> , (a_issue_warnings, "0")-<a name="line-140"></a>> ] "<a href="http://www.haskell.org/">http://www.haskell.org/</a>"+<a name="line-133"></a>> 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>> readDocument [ (a_validate, "0")+<a name="line-138"></a>> , (a_encoding, isoLatin1)+<a name="line-139"></a>> , (a_parse_by_mimetype, "1")+<a name="line-140"></a>> ] "<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>> readDocument [ (a_validate, "1")-<a name="line-145"></a>> , (a_check_namespace, "1")-<a name="line-146"></a>> , (a_remove_whitespace, "1")-<a name="line-147"></a>> , (a_trace, "2")-<a name="line-148"></a>> ] "<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>> readDocument [ (a_parse_html, "1")+<a name="line-146"></a>> , (a_encoding, isoLatin1)+<a name="line-147"></a>> ] ""+<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'>-></span> <span class='conid'>String</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-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'>>>></span>-<a name="line-159"></a> <span class='varid'>addInputOptionsToSystemState</span>-<a name="line-160"></a> <span class='varop'>>>></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'>>>></span>-<a name="line-163"></a> <span class='layout'>(</span> <span class='varid'>processDoc</span> <span class='varop'>$<</span> <span class='varid'>getMimeType</span> <span class='layout'>)</span>-<a name="line-164"></a> <span class='varop'>>>></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'>>>></span>-<a name="line-167"></a> <span class='varid'>traceSource</span>-<a name="line-168"></a> <span class='varop'>>>></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>> readDocument [ (a_encoding, isoLatin1)+<a name="line-153"></a>> , (a_mime_type, "/etc/mime.types")+<a name="line-154"></a>> , (a_tagsoup, "1")+<a name="line-155"></a>> ] "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>> readDocument [ (a_parse_html, "1")+<a name="line-161"></a>> , (a_proxy, "www-cache:3128")+<a name="line-162"></a>> , (a_curl, "1")+<a name="line-163"></a>> , (a_issue_warnings, "0")+<a name="line-164"></a>> ] "<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>> readDocument [ (a_validate, "1")+<a name="line-169"></a>> , (a_check_namespace, "1")+<a name="line-170"></a>> , (a_remove_whitespace, "1")+<a name="line-171"></a>> , (a_trace, "2")+<a name="line-172"></a>> ] "<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'>>>^</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'>>>></span>-<a name="line-207"></a> <span class='varid'>parse</span>-<a name="line-208"></a> <span class='varop'>>>></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'>>>></span>-<a name="line-212"></a> <span class='varid'>canonicalize</span>-<a name="line-213"></a> <span class='varop'>>>></span>-<a name="line-214"></a> <span class='varid'>whitespace</span>-<a name="line-215"></a> <span class='varop'>>>></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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>-></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'>-></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'>-></span> <span class='conid'>String</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-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'>-></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'>-></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'>-></span> <span class='conid'>String</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-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'>>>></span>+<a name="line-183"></a> <span class='varid'>addInputOptionsToSystemState</span>+<a name="line-184"></a> <span class='varop'>>>></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'>>>></span>+<a name="line-187"></a> <span class='layout'>(</span> <span class='varid'>processDoc</span> <span class='varop'>$<</span> <span class='varid'>getMimeType</span> <span class='layout'>)</span>+<a name="line-188"></a> <span class='varop'>>>></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'>>>></span>+<a name="line-191"></a> <span class='varid'>traceSource</span>+<a name="line-192"></a> <span class='varop'>>>></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'>>>></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'>>>^</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'>>>></span>+<a name="line-237"></a> <span class='varid'>parse</span>+<a name="line-238"></a> <span class='varop'>>>></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'>>>></span>+<a name="line-242"></a> <span class='varid'>canonicalize</span>+<a name="line-243"></a> <span class='varop'>>>></span>+<a name="line-244"></a> <span class='varid'>whitespace</span>+<a name="line-245"></a> <span class='varop'>>>></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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>-></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'>-></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'>=></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'>>>></span>-<a name="line-325"></a> <span class='varid'>substHtmlEntityRefs</span>-<a name="line-326"></a> <span class='varop'>>>></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'>>>></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'>-></span> <span class='conid'>String</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-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'>=></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'>>>></span>-<a name="line-339"></a> <span class='varid'>substXmlEntityRefs</span>-<a name="line-340"></a> <span class='varop'>>>></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'>-></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'>-></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'>=></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'>>>></span>+<a name="line-357"></a> <span class='varid'>substHtmlEntityRefs</span>+<a name="line-358"></a> <span class='varop'>>>></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'>>>></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'>=></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'>>>></span>+<a name="line-371"></a> <span class='varid'>substXmlEntityRefs</span>+<a name="line-372"></a> <span class='varop'>>>></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'>-></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'>=></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'>-></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'>-></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'>-></span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='varid'>c</span> <span class='keyglyph'>-></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'><-</span> <span class='varid'>runIOSLA</span> <span class='layout'>(</span><span class='varid'>emptyRoot</span> <span class='varop'>>>></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'>-></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'>-></span> <span class='varid'>s</span> <span class='keyglyph'>-></span> <span class='varid'>s</span><span class='layout'>)</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-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'>-></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'>-></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'>-></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'>-></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'><-</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'>-></span> <span class='conid'>IOStateArrow</span> <span class='varid'>s1</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-></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'>-></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'><-</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'>-></span> <span class='varid'>c</span><span class='layout'>)</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>-<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'>-></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'>-></span> <span class='conid'>XIOSysState</span> <span class='keyglyph'>-></span> <span class='conid'>XIOSysState</span><span class='layout'>)</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-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'>-></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'>-></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'>^>></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'>-></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'>>>></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'>-></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'>-></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'>>>></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'>-></span> <span class='conid'>String</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-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'>>>></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'>-></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'>-></span> <span class='conid'>Int</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-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'>-- > 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'>-></span> <span class='conid'>String</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-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'>>>^</span>-<a name="line-411"></a> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>Int</span> <span class='keyglyph'>-></span> <span class='conid'>Int</span><span class='layout'>)</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-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'>-></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'>>>></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'>>>></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'>-></span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>IO</span> <span class='conid'>()</span><span class='layout'>)</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-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'>&&&</span> <span class='varid'>getErrorMsg</span>-<a name="line-460"></a> <span class='varop'>>>></span>-<a name="line-461"></a> <span class='varid'>arr</span> <span class='varid'>formatErrorMsg</span>-<a name="line-462"></a> <span class='varop'>>>></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'>-></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'>>>></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'>>>></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'>-></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'>>>></span>-<a name="line-535"></a> <span class='varid'>sysErrorMsg</span>-<a name="line-536"></a> <span class='varop'>>>></span>-<a name="line-537"></a> <span class='varid'>addToErrorMsgList</span>-<a name="line-538"></a> <span class='varop'>>>></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'>-></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'>>>></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'>-></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'>>>></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'>-></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'>>>></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'>-></span> <span class='conid'>String</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-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'><+></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'>>>></span>-<a name="line-570"></a> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>level</span> <span class='varop'>>=</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'>-></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'>$<</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'><=</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'>=></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'>>>></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'>>>></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'>-></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'><=</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'>-></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'>>>></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'>>>></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'>>>></span>-<a name="line-627"></a> <span class='varid'>setBaseURI</span> -<a name="line-628"></a> <span class='varop'>>>></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'>>>></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:\/\/\/\<cwd\>\/ @) 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'>-></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'>>>></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'>-></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'>>>></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'><-</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'>>>></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'>>>></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'>-></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'>&&&</span> <span class='varid'>this</span> <span class='layout'>)</span>-<a name="line-698"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>-></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'>-></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'>-></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'>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'>&&&</span> <span class='varid'>this</span> <span class='layout'>)</span>-<a name="line-724"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>$<</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'>-></span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</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-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'>>>></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'>-></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'>>>></span>-<a name="line-749"></a> <span class='varid'>isA</span> <span class='layout'>(</span><span class='varop'>>=</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'>-></span> <span class='conid'>String</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-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'>-></span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>String</span><span class='layout'>)</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-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'>>>></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 >= 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'>:-></span> <span class='layout'>(</span> <span class='varid'>indentDoc</span>-<a name="line-773"></a> <span class='varop'>>>></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'>:-></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'>>>></span> <span class='varid'>indentDoc</span>-<a name="line-778"></a> <span class='varop'>>>></span> <span class='varid'>getChildren</span>-<a name="line-779"></a> <span class='varop'>>>></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'>:-></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 >= 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'>>>></span>-<a name="line-791"></a> <span class='varid'>addHeadlineToXmlDoc</span>-<a name="line-792"></a> <span class='varop'>>>></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 >= 1, issue document source if level >= 3, issue tree when level is >= 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'>-></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'>>>></span>-<a name="line-803"></a> <span class='varid'>traceSource</span>-<a name="line-804"></a> <span class='varop'>>>></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'>>>.</span> <span class='varid'>concat</span><span class='layout'>)</span>-<a name="line-812"></a> <span class='varop'>>>></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'>>>></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) -> 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'><+></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</span> <span class='varid'>parseURIReference</span> <span class='varid'>base</span>-<a name="line-831"></a> <span class='varid'>uri'</span> <span class='keyglyph'><-</span> <span class='varid'>parseURIReference</span> <span class='varid'>uri</span>-<a name="line-832"></a> <span class='varid'>abs'</span> <span class='keyglyph'><-</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'>=></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'>&&&</span> <span class='varid'>getBaseURI</span> <span class='layout'>)</span> <span class='varop'>>>></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'>=></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'>=></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'>=></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'>=></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'>=></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'>=></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'>=></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'>=></span> <span class='layout'>(</span><span class='conid'>URI</span> <span class='keyglyph'>-></span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-></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'><-</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'>-></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'>=></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'>-></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'>-></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'>-></span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='varid'>c</span> <span class='keyglyph'>-></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'><-</span> <span class='varid'>runIOSLA</span> <span class='layout'>(</span><span class='varid'>emptyRoot</span> <span class='varop'>>>></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'>-></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'>-></span> <span class='varid'>s</span> <span class='keyglyph'>-></span> <span class='varid'>s</span><span class='layout'>)</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-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'>-></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'>-></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'>-></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'>-></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'><-</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'>-></span> <span class='conid'>IOStateArrow</span> <span class='varid'>s1</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-></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'>-></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'><-</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'>-></span> <span class='varid'>c</span><span class='layout'>)</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>+<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'>-></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'>-></span> <span class='conid'>XIOSysState</span> <span class='keyglyph'>-></span> <span class='conid'>XIOSysState</span><span class='layout'>)</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-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'>-></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'>-></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'>^>></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'>-></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'>>>></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'>-></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'>-></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'>>>></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'>>>></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'>>>></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'>-></span> <span class='conid'>String</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-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'>>>></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'>-></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'>-></span> <span class='conid'>Int</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-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'>-- > 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'>-></span> <span class='conid'>String</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-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'>>>^</span>+<a name="line-430"></a> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>Int</span> <span class='keyglyph'>-></span> <span class='conid'>Int</span><span class='layout'>)</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-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'>-></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'>>>></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'>>>></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'>-></span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>IO</span> <span class='conid'>()</span><span class='layout'>)</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-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'>&&&</span> <span class='varid'>getErrorMsg</span>+<a name="line-479"></a> <span class='varop'>>>></span>+<a name="line-480"></a> <span class='varid'>arr</span> <span class='varid'>formatErrorMsg</span>+<a name="line-481"></a> <span class='varop'>>>></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'>-></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'>>>></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'>>>></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'>-></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'>>>></span>+<a name="line-554"></a> <span class='varid'>sysErrorMsg</span>+<a name="line-555"></a> <span class='varop'>>>></span>+<a name="line-556"></a> <span class='varid'>addToErrorMsgList</span>+<a name="line-557"></a> <span class='varop'>>>></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'>-></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'>>>></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'>-></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'>>>></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'>-></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'>>>></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'>-></span> <span class='conid'>String</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-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'><+></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'>>>></span>+<a name="line-589"></a> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>level</span> <span class='varop'>>=</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'>-></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'>$<</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'><=</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'>=></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'>>>></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'>>>></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'>-></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'><=</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'>-></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'>>>></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'>>>></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'>>>></span>+<a name="line-646"></a> <span class='varid'>setBaseURI</span> +<a name="line-647"></a> <span class='varop'>>>></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'>>>></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:\/\/\/\<cwd\>\/ @) 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'>-></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'>>>></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'>-></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'>>>></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'><-</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'>>>></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'>>>></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'>-></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'>&&&</span> <span class='varid'>this</span> <span class='layout'>)</span>+<a name="line-717"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>-></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'>-></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'>-></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'>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'>&&&</span> <span class='varid'>this</span> <span class='layout'>)</span>+<a name="line-743"></a> <span class='varop'>>>></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'>>>></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'>>>></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'>$<</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'>-></span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</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-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'>>>></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'>-></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'>>>></span>+<a name="line-768"></a> <span class='varid'>isA</span> <span class='layout'>(</span><span class='varop'>>=</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'>-></span> <span class='conid'>String</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-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'>-></span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>String</span><span class='layout'>)</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-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'>>>></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 >= 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'>:-></span> <span class='layout'>(</span> <span class='varid'>indentDoc</span>+<a name="line-792"></a> <span class='varop'>>>></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'>:-></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'>>>></span> <span class='varid'>indentDoc</span>+<a name="line-797"></a> <span class='varop'>>>></span> <span class='varid'>getChildren</span>+<a name="line-798"></a> <span class='varop'>>>></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'>:-></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 >= 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'>>>></span>+<a name="line-810"></a> <span class='varid'>addHeadlineToXmlDoc</span>+<a name="line-811"></a> <span class='varop'>>>></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 >= 1, issue document source if level >= 3, issue tree when level is >= 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'>-></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'>>>></span>+<a name="line-822"></a> <span class='varid'>traceSource</span>+<a name="line-823"></a> <span class='varop'>>>></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'>>>.</span> <span class='varid'>concat</span><span class='layout'>)</span>+<a name="line-831"></a> <span class='varop'>>>></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'>>>></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) -> 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'><+></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</span> <span class='varid'>parseURIReference</span> <span class='varid'>base</span>+<a name="line-850"></a> <span class='varid'>uri'</span> <span class='keyglyph'><-</span> <span class='varid'>parseURIReference</span> <span class='varid'>uri</span>+<a name="line-851"></a> <span class='varid'>abs'</span> <span class='keyglyph'><-</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'>=></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'>&&&</span> <span class='varid'>getBaseURI</span> <span class='layout'>)</span> <span class='varop'>>>></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'>=></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'>=></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'>=></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'>=></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'>=></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'>=></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'>=></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'>=></span> <span class='layout'>(</span><span class='conid'>URI</span> <span class='keyglyph'>-></span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-></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'><-</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'>-></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'>-></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'>-></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'>$<</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'>-></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'>-></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'>-></span> <span class='conid'>MimeTypeTable</span> <span class='keyglyph'>-></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'>-></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'><-</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'><-</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'>-></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'>-></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'>-></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'>.>></span>-<a name="line-34"></a> <span class='varid'>liftMf</span> <span class='varid'>propagateNamespaces</span>-<a name="line-35"></a> <span class='varop'>.>></span>-<a name="line-36"></a> <span class='varid'>traceTree</span>-<a name="line-37"></a> <span class='varop'>.>></span>-<a name="line-38"></a> <span class='varid'>traceSource</span>-<a name="line-39"></a> <span class='varop'>.>></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'>.>></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'>$$<</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'>-></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'>.></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'>.></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'>.></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'>-></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'>&&</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'>-></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'>-></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'>&&</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'>:-></span> <span class='varid'>getChildren</span> <span class='varop'>.></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'>:-></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'>:-></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'>-></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'>-></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'>-></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'>-></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'>.></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'>:-></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'>-></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'>-></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'>.></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'>-></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'>-></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'>:-></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'>.></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'>-></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'>.></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'>-></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'>.></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'>-></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'>:-></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'>-></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'>-></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'>&&</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'>-></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'>-></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:///<cwd>/\""</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'>-></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 <?xml ...?> 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'>-></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'>-></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'>-></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'>-></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:///<cwd>/\""</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'>-></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 <?xml ...?> 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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></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'>-- > 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'>-></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'>-></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'>-></span> <span class='varid'>state</span><span class='layout'>)</span> <span class='keyglyph'>-></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'><-</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'>-></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'>-></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'>-></span> <span class='conid'>SysState</span><span class='layout'>)</span> <span class='keyglyph'>-></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'><-</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'>-></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'>-></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'>-></span> <span class='conid'>SysStateAttrs</span><span class='layout'>)</span> <span class='keyglyph'>-></span> <span class='layout'>(</span><span class='conid'>SysState</span> <span class='keyglyph'>-></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'>-></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'>-></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'><-</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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>Int</span> <span class='keyglyph'>-></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'>-></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'><-</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'>-></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'><-</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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</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'>-></span> <span class='conid'>Int</span> <span class='keyglyph'>-></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'><-</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'>-></span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>res</span> <span class='keyglyph'>-></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'><-</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'>-></span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>res</span> <span class='keyglyph'>-></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'><-</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'>-></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'>-></span> <span class='conid'>XState</span> <span class='varid'>state1</span> <span class='varid'>res</span> <span class='keyglyph'>-></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'><-</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'><-</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'>-></span> <span class='conid'>XState</span> <span class='varid'>state1</span> <span class='varid'>res</span> <span class='keyglyph'>-></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'><-</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'>-></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'>.>></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'>-></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'>-></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 \<= 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'>-></span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'><-</span> <span class='varid'>getTraceLevel</span>-<a name="line-434"></a> <span class='keyword'>if</span> <span class='varid'>level</span> <span class='varop'><=</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'><-</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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='layout'>(</span><span class='varid'>state</span> <span class='keyglyph'>-></span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-></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'><-</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'>.>></span> <span class='varid'>errorMsgHandler</span> <span class='varop'>.>></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'>-></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'><-</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'>-></span>-<a name="line-517"></a> <span class='keyword'>do</span>-<a name="line-518"></a> <span class='varid'>errLevel</span> <span class='keyglyph'><-</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'>-></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'>-></span>-<a name="line-542"></a> <span class='keyword'>do</span>-<a name="line-543"></a> <span class='varid'>errLog</span> <span class='keyglyph'><-</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'>.>></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'><-</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'>-></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'>-></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'>.>></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'>-></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'>.>></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'>-></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'>.>></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'>-></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'>>=</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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>.></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'>.></span>-<a name="line-645"></a> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>level</span> <span class='varop'>>=</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'>.></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'>-></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'>>=</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'>-></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'><-</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'><=</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'>-></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'><-</span> <span class='varid'>f</span> <span class='varop'>$$<</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'><|></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</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'>>=</span> <span class='num'>200</span> <span class='varop'>&&</span> <span class='varid'>st</span> <span class='varop'><</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'>-></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'><-</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'><-</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'><-</span> <span class='varid'>parseResp</span>-<a name="line-109"></a> <span class='varid'>rhs</span> <span class='keyglyph'><-</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'><|></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'><-</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-122"></a> <span class='varid'>http</span> <span class='keyglyph'><-</span> <span class='varid'>string</span> <span class='str'>"HTTP/"</span>-<a name="line-123"></a> <span class='varid'>mav</span> <span class='keyglyph'><-</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'><-</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'><-</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'><-</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'><|></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'><-</span> <span class='varid'>parse1Header</span>-<a name="line-145"></a> <span class='varid'>rest</span> <span class='keyglyph'><-</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'><|></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'><-</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'><-</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'>-></span> <span class='conid'>String</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-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'><-</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'>-- (<<a href="http://curl.haxx.se/">http://curl.haxx.se/</a>>)</span>+<a name="line-67"></a><span class='comment'>-- via the curl binding</span>+<a name="line-68"></a><span class='comment'>-- <<a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl">http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl</a>></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'>-- (<<a href="http://curl.haxx.se/docs/manpage.html">http://curl.haxx.se/docs/manpage.html</a>>).</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'>-- > 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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</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'><</span> <span class='num'>200</span> <span class='varop'>&&</span> <span class='varid'>rs</span> <span class='varop'>>=</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'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>&&</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'>-></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'>-></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'>&&</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'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</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'>>=</span> <span class='num'>200</span> <span class='varop'>&&</span> <span class='varid'>st</span> <span class='varop'><</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'>-></span> <span class='conid'>URI</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='varid'>res</span>-<a name="line-141"></a> <span class='conid'>Left</span> <span class='keyword'>_</span> <span class='keyglyph'>-></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' .\>\> '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 \<- 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'>.>></span>-<a name="line-111"></a> <span class='varid'>getXmlContents</span>-<a name="line-112"></a> <span class='varop'>.>></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'>.>></span>-<a name="line-123"></a> <span class='varid'>processDTD</span>-<a name="line-124"></a> <span class='varop'>.>></span>-<a name="line-125"></a> <span class='varid'>processGeneralEntities</span>-<a name="line-126"></a> <span class='varop'>.>></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'>-></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'>-></span> <span class='conid'>PeEnv</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></span> <span class='conid'>PeEnv</span> <span class='keyglyph'>-></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'>.>></span>-<a name="line-171"></a> <span class='varid'>traceTree</span>-<a name="line-172"></a> <span class='varop'>.>></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'>.></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'>-></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'>.>></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'>.>></span>-<a name="line-187"></a> <span class='varid'>processChildrenM</span> <span class='varid'>substParamEntities</span>-<a name="line-188"></a> <span class='varop'>.>></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'><-</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'><-</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'><-</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'>$$<</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'>$$<</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'><-</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'>$$<</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'>-></span> <span class='conid'>PeEnv</span> <span class='keyglyph'>-></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 <- getState-<a name="line-284"></a> ( traceMsg 2 ("dumpPE: parameter entity environment\n" ++ M.foldWithKey showPE "" env)-<a name="line-285"></a> .>>-<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'>-></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'>.>></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'><-</span> <span class='layout'>(</span> <span class='varid'>getXmlEntityContents</span>-<a name="line-300"></a> <span class='varop'>.>></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'><-</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'>-></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'>.>></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'>.>></span>-<a name="line-328"></a> <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>-<a name="line-329"></a> <span class='varop'>.>></span>-<a name="line-330"></a> <span class='varid'>substRefsInEntityValue</span>-<a name="line-331"></a> <span class='varop'>.>></span>-<a name="line-332"></a> <span class='varid'>processEntityDecl</span>-<a name="line-333"></a> <span class='varop'>.>></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'>.>></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'>.>></span>-<a name="line-349"></a> <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>-<a name="line-350"></a> <span class='varop'>.>></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'>&&</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'>&&</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'>.>></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'>.>></span>-<a name="line-372"></a> <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>-<a name="line-373"></a> <span class='varop'>.>></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'><-</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'><-</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'>.>></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'>-></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'><-</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'>-></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'>.>></span>-<a name="line-433"></a> <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDEntityValue</span>-<a name="line-434"></a> <span class='varop'>.>></span>-<a name="line-435"></a> <span class='varid'>liftF</span> <span class='varid'>transfCharRef</span>-<a name="line-436"></a> <span class='varop'>.>></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'>.>></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'>-></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'>-></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'>.>></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'>.>></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'>.>></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'>.>></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'>-></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'>.>></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'>.>></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'>.></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'>.>></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'>.>></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'>-></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'>.>></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'>.>></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'>.>></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'>.>></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'>-></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'>.>></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'>.>></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'><-</span> <span class='layout'>(</span> <span class='varid'>getXmlEntityContents</span>-<a name="line-574"></a> <span class='varop'>.>></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'>.>></span>-<a name="line-577"></a> <span class='varid'>liftMf</span> <span class='varid'>getChildren</span>-<a name="line-578"></a> <span class='varop'>.>></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'><-</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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></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'>-></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'>&&</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'>&&</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'>"<!ENTITY lt '&#38;#60;'>"</span>-<a name="line-650"></a> <span class='layout'>,</span> <span class='str'>"<!ENTITY gt '&#62;'>"</span>-<a name="line-651"></a> <span class='layout'>,</span> <span class='str'>"<!ENTITY amp '&#38;#38;'>"</span>-<a name="line-652"></a> <span class='layout'>,</span> <span class='str'>"<!ENTITY apos '&#39;'>"</span>-<a name="line-653"></a> <span class='layout'>,</span> <span class='str'>"<!ENTITY quot '&#34;'>"</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'>-></span> <span class='conid'>RecList</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>GeEnv</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>GeFct</span> <span class='keyglyph'>-></span> <span class='conid'>GeEnv</span> <span class='keyglyph'>-></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'>.>></span>-<a name="line-703"></a> <span class='varid'>processEntities</span>-<a name="line-704"></a> <span class='varop'>.>></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'>.>></span>-<a name="line-707"></a> <span class='varid'>traceTree</span>-<a name="line-708"></a> <span class='varop'>.>></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'><-</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'>$$<</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'>-></span> <span class='conid'>RecList</span> <span class='keyglyph'>-></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'><-</span> <span class='varid'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varop'>$$<</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'><-</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'><-</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'>$$<</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'><-</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'>&&</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'>&&</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'>-></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'><-</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'>$$<</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'>.>></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'>.></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'>-></span> <span class='conid'>GeFct</span> <span class='keyglyph'>-></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'><-</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'>-></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'>-></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'>-></span> <span class='conid'>GeContext</span> <span class='keyglyph'>-></span> <span class='conid'>RecList</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>GeContext</span> <span class='keyglyph'>-></span> <span class='conid'>RecList</span> <span class='keyglyph'>-></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'><-</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'><-</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'>-></span> <span class='conid'>GeContext</span> <span class='keyglyph'>-></span> <span class='conid'>RecList</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>GeContext</span> <span class='keyglyph'>-></span> <span class='conid'>RecList</span> <span class='keyglyph'>-></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'>$$<</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'><-</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'>.>></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'><-</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'>-></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'>-></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'><-</span> <span class='varid'>substGeneralEntityInAttr</span> <span class='varid'>rl</span> <span class='varop'>$$<</span> <span class='varid'>al</span>-<a name="line-898"></a> <span class='varid'>cl'</span> <span class='keyglyph'><-</span> <span class='varid'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varop'>$$<</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'>.></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'><-</span> <span class='varid'>substGeneralEntityInAValue</span> <span class='varid'>rl</span> <span class='varop'>$$<</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'>-></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'>.>></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'>.></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'>-></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'><-</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'>.>></span>-<a name="line-66"></a> <span class='varid'>getXmlContents</span>-<a name="line-67"></a> <span class='varop'>.>></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'>.></span> <span class='varid'>getChildren</span> <span class='varop'>.></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'>.>></span>-<a name="line-91"></a> <span class='varid'>runHtmlParser</span>-<a name="line-92"></a> <span class='varop'>.>></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'>.>></span>-<a name="line-95"></a> <span class='varid'>removeWarnings</span>-<a name="line-96"></a> <span class='varop'>.>></span>-<a name="line-97"></a> <span class='varid'>traceTree</span>-<a name="line-98"></a> <span class='varop'>.>></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'>:-></span> <span class='varid'>this</span>-<a name="line-110"></a> <span class='layout'>,</span> <span class='varid'>isXTag</span> <span class='conop'>:-></span> <span class='layout'>(</span><span class='varid'>getAttrl</span> <span class='varop'>.></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'>:-></span> <span class='varid'>none</span>-<a name="line-115"></a> <span class='layout'>,</span> <span class='varid'>isXTag</span> <span class='conop'>:-></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'>:-></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'>$$<</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'>$$<</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'>.></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'>.></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'>-></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'>:-></span> <span class='varid'>substEntity</span>-<a name="line-154"></a> <span class='layout'>,</span> <span class='varid'>isXTag</span> <span class='conop'>:-></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'>:-></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'>-></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'>-></span> <span class='varid'>xwarn</span> <span class='layout'>(</span><span class='str'>"no XHTML entity found for reference: \"&"</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'>-- > main :: IO ()</span>-<a name="line-54"></a><span class='comment'>-- > main</span>-<a name="line-55"></a><span class='comment'>-- > = do</span>-<a name="line-56"></a><span class='comment'>-- > (res, errs, rc) <- getXmlDocument [] "test.xml"</span>-<a name="line-57"></a><span class='comment'>-- > if rc >= c_err</span>-<a name="line-58"></a><span class='comment'>-- > then issueErrors errs</span>-<a name="line-59"></a><span class='comment'>-- > else processTree res</span>-<a name="line-60"></a><span class='comment'>-- ></span>-<a name="line-61"></a><span class='comment'>-- > issueErrors :: XmlTrees -> IO ()</span>-<a name="line-62"></a><span class='comment'>-- ></span>-<a name="line-63"></a><span class='comment'>-- > processTree :: XmlTree -> 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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</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'>-- > main :: IO ()</span>-<a name="line-100"></a><span class='comment'>-- > main</span>-<a name="line-101"></a><span class='comment'>-- > = do</span>-<a name="line-102"></a><span class='comment'>-- > (input, readErrs, rc) <- getXmlDocument [...] "test.xml"</span>-<a name="line-103"></a><span class='comment'>-- > if rc >= c_err</span>-<a name="line-104"></a><span class='comment'>-- > then issueErrors readErrs</span>-<a name="line-105"></a><span class='comment'>-- > else processTree input</span>-<a name="line-106"></a><span class='comment'>-- ></span>-<a name="line-107"></a><span class='comment'>-- > processTree :: XmlTree -> IO ()</span>-<a name="line-108"></a><span class='comment'>-- > processTree t</span>-<a name="line-109"></a><span class='comment'>-- > = let res = computeNewTree input</span>-<a name="line-110"></a><span class='comment'>-- > in do</span>-<a name="line-111"></a><span class='comment'>-- > (writeErrs, rc2) <- putXmlDocument [...] "out.xml" res</span>-<a name="line-112"></a><span class='comment'>-- > if rc2 >= c_err</span>-<a name="line-113"></a><span class='comment'>-- > then issueErrors writeErrs</span>-<a name="line-114"></a><span class='comment'>-- > else return ()</span>-<a name="line-115"></a><span class='comment'>-- ></span>-<a name="line-116"></a><span class='comment'>-- > issueErrors :: XmlTrees -> IO ()</span>-<a name="line-117"></a><span class='comment'>-- ></span>-<a name="line-118"></a><span class='comment'>-- > computeNewTree :: XmlTree -> 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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'><-</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'>-- > parseDocument [ (a_source, "test.xml")</span>-<a name="line-186"></a><span class='comment'>-- > , (a_validate, "0")</span>-<a name="line-187"></a><span class='comment'>-- > , (a_encoding, isoLatin1)</span>-<a name="line-188"></a><span class='comment'>-- > ] 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'>-- > parseDocument [ (a_source, "<a href="http://www.haskell.org/">http://www.haskell.org/</a>")</span>-<a name="line-193"></a><span class='comment'>-- > , (a_parse_html, "1")</span>-<a name="line-194"></a><span class='comment'>-- > , (a_proxy, "www-cache:3128")</span>-<a name="line-195"></a><span class='comment'>-- > , (a_curl, "1")</span>-<a name="line-196"></a><span class='comment'>-- > , (a_issue_warnings, "0")</span>-<a name="line-197"></a><span class='comment'>-- > ] 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'>-- > parseDocument [ (a_source, "<a href="http://www.w3c.org/">http://www.w3c.org/</a>")</span>-<a name="line-202"></a><span class='comment'>-- > , (a_parse_html, "0") -- default</span>-<a name="line-203"></a><span class='comment'>-- > , (a_validate, "1") -- default</span>-<a name="line-204"></a><span class='comment'>-- > , (a_check_namespace, "1")</span>-<a name="line-205"></a><span class='comment'>-- > , (a_remove_whitespace, "1")</span>-<a name="line-206"></a><span class='comment'>-- > , (a_trace, "2")</span>-<a name="line-207"></a><span class='comment'>-- > ] 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'>-- > parseDocument [ (a_source, "test.xml")</span>-<a name="line-212"></a><span class='comment'>-- > , (a_validate, "1")</span>-<a name="line-213"></a><span class='comment'>-- > , (a_check_namespace, "1")</span>-<a name="line-214"></a><span class='comment'>-- > , (a_collect_errors, "1")</span>-<a name="line-215"></a><span class='comment'>-- > , (a_issue_errors, "0")</span>-<a name="line-216"></a><span class='comment'>-- > ] 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'>-></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'>.>></span>-<a name="line-227"></a> <span class='varid'>traceTree</span>-<a name="line-228"></a> <span class='varop'>.>></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'>.>></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'>:-></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'>:-></span> <span class='varid'>checkWellformedDoc</span> <span class='comment'>-- parse XML and process entities</span>-<a name="line-236"></a> <span class='varop'>.>></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'>.>></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'>.>></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'>:-></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'>:-></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'>.>></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'>.>></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'>.>></span>-<a name="line-267"></a> <span class='varid'>traceSource</span>-<a name="line-268"></a> <span class='varop'>.>></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'>-></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'>-></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'>-></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'>-></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 \>,\<,\",\',&</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'>-- ></span>-<a name="line-326"></a><span class='comment'>-- > main :: IO ()</span>-<a name="line-327"></a><span class='comment'>-- > main</span>-<a name="line-328"></a><span class='comment'>-- > = do</span>-<a name="line-329"></a><span class='comment'>-- > argv <- getArgs -- get the commandline arguments</span>-<a name="line-330"></a><span class='comment'>-- > (inp, outp, options) <- cmdlineOpts argv -- and evaluate them, return a key-value list</span>-<a name="line-331"></a><span class='comment'>-- > -- and input and output</span>-<a name="line-332"></a><span class='comment'>-- > res <- run' $ application inp outp options $ emptyRoot -- run the application</span>-<a name="line-333"></a><span class='comment'>-- > </span>-<a name="line-334"></a><span class='comment'>-- > exitWith (if null res</span>-<a name="line-335"></a><span class='comment'>-- > then ExitFailure (-1)</span>-<a name="line-336"></a><span class='comment'>-- > else exitSuccess</span>-<a name="line-337"></a><span class='comment'>-- > )</span>-<a name="line-338"></a><span class='comment'>-- ></span>-<a name="line-339"></a><span class='comment'>-- > application :: String -> String -> Attributes -> XmlStateFilter ()</span>-<a name="line-340"></a><span class='comment'>-- > application inp outp al</span>-<a name="line-341"></a><span class='comment'>-- > = parseDocument (al ++ [(a_source, inp)]) -- set options and source</span>-<a name="line-342"></a><span class='comment'>-- > .>> -- and parse document</span>-<a name="line-343"></a><span class='comment'>-- > processDocument -- the hard work</span>-<a name="line-344"></a><span class='comment'>-- > .>></span>-<a name="line-345"></a><span class='comment'>-- > writeDocument [(a_output_file, outp)] -- issue results</span>-<a name="line-346"></a><span class='comment'>-- > .>></span>-<a name="line-347"></a><span class='comment'>-- > checkStatus -- check errors</span>-<a name="line-348"></a><span class='comment'>-- ></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'>-></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'>.>></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'>:-></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'>:-></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'>:-></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'>.>></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'>:-></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'>:-></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'>:-></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'>.></span>-<a name="line-370"></a> <span class='varid'>addXmlPiToDoc</span> <span class='comment'>-- add <?xml ... > pi</span>-<a name="line-371"></a> <span class='varop'>.></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'>:-></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'>.>></span>-<a name="line-378"></a> <span class='varid'>writeXmlDoc</span>-<a name="line-379"></a> <span class='varop'>.>></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'>-></span> <span class='conid'>Attributes</span> <span class='keyglyph'>-></span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span> <span class='keyglyph'>-></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'>.>></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'>.></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'>.>></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'>.>></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'>.>></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'>:-></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'>.></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'>:-></span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-></span> <span class='varid'>setSysErrorHandler</span> <span class='layout'>(</span><span class='varid'>errorMsgLogging</span><span class='varop'>.>></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'>:-></span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-></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'>:-></span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-></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'>:-></span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-></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'>.>></span>-<a name="line-447"></a> <span class='varid'>processFilter</span>-<a name="line-448"></a> <span class='varop'>.>></span>-<a name="line-449"></a> <span class='layout'>(</span> <span class='varid'>thisM</span>-<a name="line-450"></a> <span class='varop'>+++>></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'>-></span> <span class='layout'>(</span><span class='conid'>URI</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'><-</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'><-</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'><-</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'>-></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'>-></span> <span class='keyword'>do</span>-<a name="line-57"></a> <span class='varid'>c</span> <span class='keyglyph'><-</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'>.></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'>.></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 -> 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'><|></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'>-></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'><-</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'><-</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'><-</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'>.></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'>.>></span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>st</span> <span class='varop'>>=</span> <span class='num'>200</span> <span class='varop'>&&</span> <span class='varid'>st</span> <span class='varop'><</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'>-></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'>-></span> <span class='varid'>res</span>-<a name="line-114"></a> <span class='conid'>Left</span> <span class='keyword'>_</span> <span class='keyglyph'>-></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'><-</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'><-</span> <span class='varid'>parseResp</span>-<a name="line-126"></a> <span class='varid'>rhs</span> <span class='keyglyph'><-</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'><-</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'><|></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'><-</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-144"></a> <span class='varid'>http</span> <span class='keyglyph'><-</span> <span class='varid'>string</span> <span class='str'>"HTTP/"</span>-<a name="line-145"></a> <span class='varid'>mav</span> <span class='keyglyph'><-</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'><-</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'><-</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'><-</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'><|></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'><-</span> <span class='varid'>parse1Header</span>-<a name="line-167"></a> <span class='varid'>rest</span> <span class='keyglyph'><-</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'><|></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'><-</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'><-</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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'><-</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'><-</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'><-</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'>-></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'>-></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'>>=</span> <span class='num'>200</span> <span class='varop'>&&</span> <span class='varid'>st</span> <span class='varop'><</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'>.></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'>-></span> <span class='conid'>URI</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</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'>>=</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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'><-</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'>-></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'>-></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'>>>=</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'>-></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'>-></span> <span class='conid'>Tags</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'><-</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'>-></span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></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'>&&</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'>-></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'>-></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'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></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'><-</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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>NsEnv</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>&&</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'>-></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'>-></span> <span class='conid'>NsEnv</span> <span class='keyglyph'>-></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'>&&</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; 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'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='layout'>(</span> <span class='conid'>TagText</span> <span class='varop'>$</span> <span class='str'>"&"</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: &"</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'>-></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'>-></span> <span class='layout'>(</span><span class='conid'>TagText</span> <span class='varop'>$</span> <span class='str'>"&"</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: &"</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'>-></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'>-></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'>>>=</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'>-></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'>-></span> <span class='conid'>Tags</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'><-</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'>-></span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-></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'>-></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'>&&</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'>-></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'>-></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'>-></span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-></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'><-</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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>NsEnv</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>&&</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'>-></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'>-></span> <span class='conid'>NsEnv</span> <span class='keyglyph'>-></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'>&&</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; 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'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='layout'>(</span> <span class='conid'>TagText</span> <span class='varop'>$</span> <span class='str'>"&"</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: &"</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'>-></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'>-></span> <span class='layout'>(</span><span class='conid'>TagText</span> <span class='varop'>$</span> <span class='str'>"&"</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: &"</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'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>&&</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'>-></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'><-</span> <span class='varid'>getText</span>-<a name="line-360"></a> <span class='varid'>rl</span> <span class='keyglyph'><-</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'><-</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'><-</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'><-</span> <span class='varid'>getCmt</span>-<a name="line-373"></a> <span class='varid'>rl</span> <span class='keyglyph'><-</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'><-</span> <span class='varid'>getWarn</span>-<a name="line-378"></a> <span class='varid'>rl</span> <span class='keyglyph'><-</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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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. <td>...</tr></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 </n1></span>-<a name="line-406"></a> <span class='varid'>insCls</span> <span class='varid'>n'</span> <span class='comment'>-- insert a </n'></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'><-</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'><-</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'>-></span> <span class='conid'>String</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'>-></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'><-</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'><-</span> <span class='varid'>mkAttrs</span> <span class='varid'>al1</span>-<a name="line-433"></a> <span class='varid'>rl</span> <span class='keyglyph'><-</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'><-</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'><-</span> <span class='varid'>mkAttrs</span> <span class='varid'>al1</span>-<a name="line-442"></a> <span class='varid'>cs</span> <span class='keyglyph'><-</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'><-</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'><-</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'>-></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'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>Bool</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></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'>&&</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'>-></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'><-</span> <span class='varid'>getText</span>+<a name="line-379"></a> <span class='varid'>rl</span> <span class='keyglyph'><-</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'><-</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'><-</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'><-</span> <span class='varid'>getCmt</span>+<a name="line-392"></a> <span class='varid'>rl</span> <span class='keyglyph'><-</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'><-</span> <span class='varid'>getWarn</span>+<a name="line-397"></a> <span class='varid'>rl</span> <span class='keyglyph'><-</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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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. <td>...</tr></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 </n1></span>+<a name="line-425"></a> <span class='varid'>insCls</span> <span class='varid'>n'</span> <span class='comment'>-- insert a </n'></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'><-</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'><-</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'>-></span> <span class='conid'>String</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'>-></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'><-</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'><-</span> <span class='varid'>mkAttrs</span> <span class='varid'>al1</span>+<a name="line-452"></a> <span class='varid'>rl</span> <span class='keyglyph'><-</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'><-</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'><-</span> <span class='varid'>mkAttrs</span> <span class='varid'>al1</span>+<a name="line-461"></a> <span class='varid'>cs</span> <span class='keyglyph'><-</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'><-</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'><-</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'>-></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'>-></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'>.>></span>-<a name="line-90"></a> <span class='varid'>getUrlContents</span>-<a name="line-91"></a> <span class='varop'>.>></span>-<a name="line-92"></a> <span class='varid'>liftF</span> <span class='varid'>parseEncodingSpec</span>-<a name="line-93"></a> <span class='varop'>.>></span>-<a name="line-94"></a> <span class='varid'>guessDocEncoding</span>-<a name="line-95"></a> <span class='varop'>.>></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'>.>></span>-<a name="line-98"></a> <span class='varid'>traceTree</span>-<a name="line-99"></a> <span class='varop'>.>></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'>.>></span>-<a name="line-116"></a> <span class='varid'>setBaseURIFilter</span>-<a name="line-117"></a> <span class='varop'>.>></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'>.>></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'>.>></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'>-></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'>-></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'><-</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'><-</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'>-></span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>.>></span>-<a name="line-198"></a> <span class='varid'>issueError</span>-<a name="line-199"></a> <span class='varop'>.>></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'>.>></span>-<a name="line-219"></a> <span class='layout'>(</span> <span class='varid'>issueDecodingErrs</span>-<a name="line-220"></a> <span class='varop'>+++>></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'><-</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:\/\/\/\<current-working-dir\>\/@</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'>-></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'><-</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'><-</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'>-></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'><-</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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'><-</span> <span class='varid'>parseURIReference</span> <span class='varid'>base</span>-<a name="line-291"></a> <span class='varid'>uri'</span> <span class='keyglyph'><-</span> <span class='varid'>parseURIReference</span> <span class='varid'>uri</span>-<a name="line-292"></a> <span class='varid'>abs'</span> <span class='keyglyph'><-</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'><-</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'><-</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'>.></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'>.>></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'>:-></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'>:-></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'>:-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>.></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'>.></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'>-></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'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='varid'>none</span>-<a name="line-87"></a> <span class='conid'>Just</span> <span class='varid'>f</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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 (<<a href="http://www.flightlab.com/~joe/sgml/validate.html">http://www.flightlab.com/~joe/sgml/validate.html</a>>).</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 <ftp://iecc.com/pub/file/regex.tar.gz>.</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 <- L(e), y <- 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 <- L(e), y <- 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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>=></span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>&&</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'>=></span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></span> <span class='varid'>re_unit</span>-<a name="line-229"></a> <span class='keyglyph'>|</span> <span class='varid'>otherwise</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>=></span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-></span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></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'>-- -> 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'>=></span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>=></span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>=></span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-></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'>-></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'>-></span> <span class='str'>""</span>-<a name="line-293"></a> <span class='conid'>RE_SYM</span> <span class='varid'>sym</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>&&</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'>-></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'>&&</span> <span class='varid'>isAlt</span> <span class='varid'>f</span> <span class='keyglyph'>-></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'>&&</span> <span class='varid'>isAlt</span> <span class='varid'>f</span> <span class='keyglyph'>-></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'>-></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'>&&</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'>-></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'>&&</span> <span class='varid'>isSeq</span> <span class='varid'>f</span> <span class='keyglyph'>-></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'>&&</span> <span class='varid'>isSeq</span> <span class='varid'>f</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>.>></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'>.>></span>-<a name="line-44"></a> <span class='varid'>traceTree</span>-<a name="line-45"></a> <span class='varop'>.>></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'>.></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'>$$<</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'>.>></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'>.></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'>:-></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'>:-></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'>.></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'>:-></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'>:-></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'>.></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'>.></span> <span class='varid'>isDoctype</span> <span class='varop'>.></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'>-></span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-></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'>-></span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='varid'>re_unit</span>-<a name="line-82"></a> <span class='keyglyph'>|</span> <span class='varid'>otherwise</span> <span class='keyglyph'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='conid'>String</span> <span class='keyglyph'>-></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'>-></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'>-></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 < 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> </td></tr>+ <tr><td><i>Last modified: 2008-06-23</i></td><td> </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" ]