HaXml 1.19.2 → 1.19.3
raw patch · 42 files changed
+3199/−2664 lines, 42 filesdep ~basedep ~bytestringdep ~polyparse
Dependency ranges changed: base, bytestring, polyparse
Files
- HaXml.cabal +6/−4
- Makefile +1/−1
- configure +1/−1
- docs/HaXml/Text-XML-HaXml-ShowXmlLazy.html +1/−1
- docs/HaXml/Text-XML-HaXml-TypeMapping.html +48/−0
- docs/HaXml/Text-XML-HaXml-Types.html +37/−1
- docs/HaXml/Text-XML-HaXml-XmlContent.html +52/−4
- docs/HaXml/doc-index-I.html +1/−3
- docs/HaXml/src/Text/XML/HaXml/ByteStringPP.html +308/−266
- docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Convert.html +32/−31
- docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Instance.html +211/−209
- docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/TypeDef.html +100/−99
- docs/HaXml/src/Text/XML/HaXml/Escape.html +30/−30
- docs/HaXml/src/Text/XML/HaXml/Html/Generate.html +140/−140
- docs/HaXml/src/Text/XML/HaXml/OneOfN.html +19/−19
- docs/HaXml/src/Text/XML/HaXml/Posn.html +3/−3
- docs/HaXml/src/Text/XML/HaXml/Pretty.html +265/−226
- docs/HaXml/src/Text/XML/HaXml/SAX.html +4/−4
- docs/HaXml/src/Text/XML/HaXml/ShowXmlLazy.html +322/−274
- docs/HaXml/src/Text/XML/HaXml/TypeMapping.html +126/−111
- docs/HaXml/src/Text/XML/HaXml/Types.html +130/−128
- docs/HaXml/src/Text/XML/HaXml/Validate.html +48/−42
- docs/HaXml/src/Text/XML/HaXml/XmlContent.html +679/−636
- docs/changelog.html +3/−1
- docs/index.html +6/−3
- src/Makefile +1/−1
- src/Text/XML/HaXml/ByteStringPP.hs +87/−45
- src/Text/XML/HaXml/DtdToHaskell/Convert.hs +16/−15
- src/Text/XML/HaXml/DtdToHaskell/Instance.hs +130/−128
- src/Text/XML/HaXml/DtdToHaskell/TypeDef.hs +47/−46
- src/Text/XML/HaXml/Escape.hs +30/−30
- src/Text/XML/HaXml/Html/Generate.hs +18/−18
- src/Text/XML/HaXml/OneOfN.hs +19/−19
- src/Text/XML/HaXml/Posn.hs +3/−3
- src/Text/XML/HaXml/Pretty.hs +50/−11
- src/Text/XML/HaXml/SAX.hs +4/−4
- src/Text/XML/HaXml/ShowXmlLazy.hs +82/−34
- src/Text/XML/HaXml/TypeMapping.hs +15/−0
- src/Text/XML/HaXml/Types.hs +32/−30
- src/Text/XML/HaXml/Validate.hs +6/−0
- src/Text/XML/HaXml/XmlContent.hs +82/−39
- src/tools/Xtract.hs +4/−4
HaXml.cabal view
@@ -1,5 +1,5 @@ name: HaXml-version: 1.19.2+version: 1.19.3 license: LGPL license-file: COPYRIGHT author: Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk>@@ -14,7 +14,9 @@ cabal-version: >=1.2 flag splitBase+ default: True flag bytestringInBase+ default: False library exposed-modules:@@ -46,7 +48,7 @@ Text.XML.HaXml.Xtract.Combinators, Text.XML.HaXml.Xtract.Lex, Text.XML.HaXml.Xtract.Parse- hs-source-dir: src+ hs-source-dirs: src build-depends: base, haskell98, polyparse if flag(splitBase) build-depends: base >= 3, pretty, random, containers@@ -56,8 +58,8 @@ build-depends: base >= 2 && < 3 else build-depends: base < 2 || >= 3, bytestring- extensions: CPP- cpp-options: -DVERSION=1.19.2+ extensions: CPP, ExistentialQuantification+ cpp-options: -DVERSION=1.19.3 nhc98-options: -K10M Executable Canonicalise
Makefile view
@@ -1,5 +1,5 @@ SOFTWARE = HaXml-VERSION = 1.19.2+VERSION = 1.19.3 #CPP = cpp -traditional CPP = cpphs --text --noline # useful e.g. on MacOS X
configure view
@@ -2,7 +2,7 @@ # configure -- prepare to compile/install the HaXml package # author: Malcolm.Wallace@cs.york.ac.uk, August 2002 -VERSION="1.19.1"+VERSION="1.19.3" if [ -f obj/prefix ] then INSTALLDIR=`cat obj/prefix`
docs/HaXml/Text-XML-HaXml-ShowXmlLazy.html view
@@ -122,7 +122,7 @@ ></TR ><TR ><TD CLASS="doc"->Convert a fully-typed XML document to a string (without DTD). +>Convert a fully-typed XML document to a string (without DTD). </TD ></TR ><TR
docs/HaXml/Text-XML-HaXml-TypeMapping.html view
@@ -435,6 +435,54 @@ ></TR ><TR ><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> d) => <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> (a, b, c, d)</TD+></TR+><TR+><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> d, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> e) => <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> (a, b, c, d, e)</TD+></TR+><TR+><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> d, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> e, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> f) => <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> (a, b, c, d, e, f)</TD+></TR+><TR+><TD CLASS="decl" ><A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable" >HTypeable</A > a => <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
docs/HaXml/Text-XML-HaXml-Types.html view
@@ -391,6 +391,18 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3Ainfo"+>info</A+> :: <A HREF="Text-XML-HaXml-Types.html#t%3AContent"+>Content</A+> t -> t</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3AProlog"@@ -2466,6 +2478,30 @@ ></TD ></TR ><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3Ainfo"+></A+><B+>info</B+> :: <A HREF="Text-XML-HaXml-Types.html#t%3AContent"+>Content</A+> t -> t</TD+><TD CLASS="declbut"+><A HREF="src/Text/XML/HaXml/Types.html#info"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR ><TD CLASS="section2" ><A NAME="6" >Administrative parts of the document@@ -3565,7 +3601,7 @@ >Plus</B ></TD ><TD CLASS="rdoc"->One Or More +>One Or More </TD ></TR ></TABLE
docs/HaXml/Text-XML-HaXml-XmlContent.html view
@@ -2069,6 +2069,54 @@ ></TR ><TR ><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> d) => <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> (a, b, c, d)</TD+></TR+><TR+><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> d, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> e) => <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> (a, b, c, d, e)</TD+></TR+><TR+><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> d, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> e, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> f) => <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> (a, b, c, d, e, f)</TD+></TR+><TR+><TD CLASS="decl" ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent" >XmlContent</A > a => <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"@@ -3201,7 +3249,7 @@ ><TR ><TD CLASS="doc" >Get the next content element, checking that it has one of the required- tags, using the given matching function. + tags, using the given matching function. (Skips over comments and whitespace, rejects text and refs. Also returns position of element.) </TD@@ -3469,7 +3517,7 @@ ></TR ><TR ><TD CLASS="doc"->Turn a simple string into XML text. +>Turn a simple string into XML text. </TD ></TR ><TR@@ -4370,12 +4418,12 @@ ><TR ><TD CLASS="ndoc" ><P->A type corresponding to XML's ANY contentspec. +>A type corresponding to XML's ANY contentspec. It is either a list of unconverted xml <TT ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AContent" >Content</A ></TT-> +> or some <TT ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent" >XmlContent</A
docs/HaXml/doc-index-I.html view
@@ -351,9 +351,7 @@ ><TD CLASS="indexlinks" ><A HREF="Text-XML-HaXml-Types.html#v%3Ainfo" >Text.XML.HaXml.Types</A->, <A HREF="Text-XML-HaXml.html#v%3Ainfo"->Text.XML.HaXml</A-></TD+>, Text.XML.HaXml</TD ></TR ><TR ><TD CLASS="indexentry"
docs/HaXml/src/Text/XML/HaXml/ByteStringPP.html view
@@ -24,279 +24,321 @@ <a name="(line22)"></a> <a name="(line23)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>,</font>elem<font color=Cyan>,</font>concat<font color=Cyan>)</font> <a name="(line24)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>-<a name="(line25)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font> +<a name="(line25)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font> <a name="(line26)"></a><font color=Blue>--import Data.ByteString.Lazy hiding (pack,map,head,any,singleton,intersperse,join)</font>-<a name="(line27)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Cyan>(</font>ByteString()<font color=Cyan>,</font> concat<font color=Cyan>,</font> pack<font color=Cyan>,</font> singleton<font color=Cyan>,</font> join+<a name="(line27)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Cyan>(</font>ByteString()<font color=Cyan>,</font> concat<font color=Cyan>,</font> pack<font color=Cyan>,</font> singleton<font color=Cyan>,</font> intercalate <a name="(line28)"></a> <font color=Cyan>,</font> append<font color=Cyan>,</font> elem<font color=Cyan>,</font> empty<font color=Cyan>)</font> <a name="(line29)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types <a name="(line30)"></a>-<a name="(line31)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line32)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x-<a name="(line33)"></a>-<a name="(line34)"></a><a name="maybe"></a>maybe f Nothing <font color=Red>=</font> empty-<a name="(line35)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line36)"></a>-<a name="(line37)"></a>-<a name="(line38)"></a><font color=Blue>-- A simple implementation of the pretty-printing combinator interface,</font>-<a name="(line39)"></a><font color=Blue>-- but for plain ByteStrings:</font>-<a name="(line40)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan><></font> -<a name="(line41)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan><+></font>-<a name="(line42)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>$$</font><font color=Cyan>,</font> <font color=Cyan>$+$</font>-<a name="(line43)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan><></font><font color=Cyan>)</font> <font color=Red>::</font> ByteString <font color=Red>-></font> ByteString <font color=Red>-></font> ByteString <font color=Blue>-- Beside</font>-<a name="(line44)"></a><a name="hcat"></a>hcat <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- List version of <></font>-<a name="(line45)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan><+></font><font color=Cyan>)</font> <font color=Red>::</font> ByteString <font color=Red>-></font> ByteString <font color=Red>-></font> ByteString <font color=Blue>-- Beside, separated by space</font>-<a name="(line46)"></a><a name="hsep"></a>hsep <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- List version of <+></font>-<a name="(line47)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> <font color=Red>::</font> ByteString <font color=Red>-></font> ByteString <font color=Red>-></font> ByteString <font color=Blue>-- Above; if there is no</font>-<a name="(line48)"></a> <font color=Blue>-- overlap, it "dovetails"</font>-<a name="(line49)"></a><a name="vcat"></a>vcat <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- List version of $$</font>-<a name="(line50)"></a><a name="cat"></a>cat <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- Either hcat or vcat</font>-<a name="(line51)"></a><a name="sep"></a>sep <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- Either hsep or vcat</font>-<a name="(line52)"></a><a name="fcat"></a>fcat <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- ``Paragraph fill'' version of cat</font>-<a name="(line53)"></a><a name="fsep"></a>fsep <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- ``Paragraph fill'' version of sep</font>-<a name="(line54)"></a><a name="nest"></a>nest <font color=Red>::</font> Int <font color=Red>-></font> ByteString <font color=Red>-></font> ByteString <font color=Blue>-- Nested</font>-<a name="(line55)"></a>-<a name="(line56)"></a><font color=Cyan>(</font><font color=Cyan><></font><font color=Cyan>)</font> b1 b2 <font color=Red>=</font> b1 <font color=Cyan>`append`</font> b2-<a name="(line57)"></a><font color=Cyan>(</font><font color=Cyan><+></font><font color=Cyan>)</font> b1 b2 <font color=Red>=</font> b1 <font color=Cyan><></font> pack <font color=Magenta>" "</font> <font color=Cyan><></font> b2-<a name="(line58)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> b1 b2 <font color=Red>=</font> b1 <font color=Cyan><></font> pack <font color=Magenta>"\n"</font> <font color=Cyan><></font> b2-<a name="(line59)"></a><a name="$+$"></a><font color=Cyan>(</font><font color=Cyan>$+$</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>-<a name="(line60)"></a>-<a name="(line61)"></a>hcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>concat -<a name="(line62)"></a>hsep <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>join <font color=Cyan>(</font>singleton <font color=Magenta>' '</font><font color=Cyan>)</font>-<a name="(line63)"></a>vcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>join <font color=Cyan>(</font>singleton <font color=Magenta>'\n'</font><font color=Cyan>)</font>-<a name="(line64)"></a>cat <font color=Red>=</font> hcat-<a name="(line65)"></a>sep <font color=Red>=</font> hsep-<a name="(line66)"></a><a name="text"></a>text <font color=Red>=</font> pack-<a name="(line67)"></a>fcat <font color=Red>=</font> cat-<a name="(line68)"></a>fsep <font color=Red>=</font> sep-<a name="(line69)"></a>nest <font color=Green><u>_</u></font> b <font color=Red>=</font> pack <font color=Magenta>" "</font> <font color=Cyan><></font> b-<a name="(line70)"></a><a name="parens"></a>parens p <font color=Red>=</font> pack <font color=Magenta>"("</font> <font color=Cyan><></font> p <font color=Cyan><></font> pack <font color=Magenta>")"</font>-<a name="(line71)"></a>-<a name="(line72)"></a>-<a name="(line73)"></a><font color=Blue>----</font>-<a name="(line74)"></a><font color=Blue>-- Now for the XML pretty-printing interface.</font>-<a name="(line75)"></a><font color=Blue>-- (Basically copied direct from Text.XML.HaXml.Pretty).</font>+<a name="(line31)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-></font> t1<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>t2 <font color=Red>-></font> t1<font color=Cyan>)</font> <font color=Red>-></font> Either t t2 <font color=Red>-></font> t1+<a name="(line32)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font> <font color=Red>=</font> f x+<a name="(line33)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x+<a name="(line34)"></a>+<a name="(line35)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-></font> ByteString<font color=Cyan>)</font> <font color=Red>-></font> Maybe t <font color=Red>-></font> ByteString+<a name="(line36)"></a>maybe <font color=Green><u>_</u></font> Nothing <font color=Red>=</font> empty+<a name="(line37)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x+<a name="(line38)"></a>+<a name="(line39)"></a>+<a name="(line40)"></a><font color=Blue>-- A simple implementation of the pretty-printing combinator interface,</font>+<a name="(line41)"></a><font color=Blue>-- but for plain ByteStrings:</font>+<a name="(line42)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan><></font>+<a name="(line43)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan><+></font>+<a name="(line44)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>$$</font>+<a name="(line45)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan><></font><font color=Cyan>)</font> <font color=Red>::</font> ByteString <font color=Red>-></font> ByteString <font color=Red>-></font> ByteString <font color=Blue>-- Beside</font>+<a name="(line46)"></a><a name="hcat"></a>hcat <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- List version of <></font>+<a name="(line47)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan><+></font><font color=Cyan>)</font> <font color=Red>::</font> ByteString <font color=Red>-></font> ByteString <font color=Red>-></font> ByteString <font color=Blue>-- Beside, separated by space</font>+<a name="(line48)"></a><a name="hsep"></a>hsep <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- List version of <+></font>+<a name="(line49)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> <font color=Red>::</font> ByteString <font color=Red>-></font> ByteString <font color=Red>-></font> ByteString <font color=Blue>-- Above; if there is no</font>+<a name="(line50)"></a> <font color=Blue>-- overlap, it "dovetails"</font>+<a name="(line51)"></a><a name="vcat"></a>vcat <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- List version of $$</font>+<a name="(line52)"></a><a name="sep"></a><font color=Blue>-- cat :: [ByteString] -> ByteString -- Either hcat or vcat</font>+<a name="(line53)"></a>sep <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- Either hsep or vcat</font>+<a name="(line54)"></a><a name="fsep"></a><font color=Blue>-- fcat :: [ByteString] -> ByteString -- ``Paragraph fill'' version of cat</font>+<a name="(line55)"></a>fsep <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-></font> ByteString <font color=Blue>-- ``Paragraph fill'' version of sep</font>+<a name="(line56)"></a><a name="nest"></a>nest <font color=Red>::</font> Int <font color=Red>-></font> ByteString <font color=Red>-></font> ByteString <font color=Blue>-- Nested</font>+<a name="(line57)"></a>+<a name="(line58)"></a><font color=Cyan>(</font><font color=Cyan><></font><font color=Cyan>)</font> b1 b2 <font color=Red>=</font> b1 <font color=Cyan>`append`</font> b2+<a name="(line59)"></a><font color=Cyan>(</font><font color=Cyan><+></font><font color=Cyan>)</font> b1 b2 <font color=Red>=</font> b1 <font color=Cyan><></font> pack <font color=Magenta>" "</font> <font color=Cyan><></font> b2+<a name="(line60)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> b1 b2 <font color=Red>=</font> b1 <font color=Cyan><></font> pack <font color=Magenta>"\n"</font> <font color=Cyan><></font> b2+<a name="(line61)"></a><font color=Blue>-- ($+$) = ($$)</font>+<a name="(line62)"></a>+<a name="(line63)"></a>hcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>concat+<a name="(line64)"></a>hsep <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>intercalate <font color=Cyan>(</font>singleton <font color=Magenta>' '</font><font color=Cyan>)</font>+<a name="(line65)"></a>vcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>intercalate <font color=Cyan>(</font>singleton <font color=Magenta>'\n'</font><font color=Cyan>)</font>+<a name="(line66)"></a><font color=Green><u>_</u></font> <font color=Red>=</font> hcat+<a name="(line67)"></a>sep <font color=Red>=</font> hsep+<a name="(line68)"></a><a name="text"></a>text <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> ByteString+<a name="(line69)"></a>text <font color=Red>=</font> pack+<a name="(line70)"></a><font color=Blue>-- _ = cat</font>+<a name="(line71)"></a>fsep <font color=Red>=</font> sep+<a name="(line72)"></a>nest <font color=Green><u>_</u></font> b <font color=Red>=</font> pack <font color=Magenta>" "</font> <font color=Cyan><></font> b+<a name="(line73)"></a><a name="parens"></a>parens <font color=Red>::</font> ByteString <font color=Red>-></font> ByteString+<a name="(line74)"></a>parens p <font color=Red>=</font> pack <font color=Magenta>"("</font> <font color=Cyan><></font> p <font color=Cyan><></font> pack <font color=Magenta>")"</font>+<a name="(line75)"></a> <a name="(line76)"></a>-<a name="(line77)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-></font> ByteString-<a name="(line78)"></a><a name="prolog"></a>prolog <font color=Red>::</font> Prolog <font color=Red>-></font> ByteString-<a name="(line79)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> XMLDecl <font color=Red>-></font> ByteString-<a name="(line80)"></a><a name="misc"></a>misc <font color=Red>::</font> Misc <font color=Red>-></font> ByteString-<a name="(line81)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> Bool <font color=Red>-></font> ByteString-<a name="(line82)"></a>-<a name="(line83)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-></font> ByteString-<a name="(line84)"></a><a name="markupdecl"></a>markupdecl <font color=Red>::</font> MarkupDecl <font color=Red>-></font> ByteString-<a name="(line85)"></a><a name="extsubset"></a>extsubset <font color=Red>::</font> ExtSubset <font color=Red>-></font> ByteString-<a name="(line86)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-></font> ByteString-<a name="(line87)"></a><a name="cp"></a>cp <font color=Red>::</font> CP <font color=Red>-></font> ByteString-<a name="(line88)"></a>-<a name="(line89)"></a><a name="element"></a>element <font color=Red>::</font> Element i <font color=Red>-></font> ByteString-<a name="(line90)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-></font> ByteString-<a name="(line91)"></a><a name="content"></a>content <font color=Red>::</font> Content i <font color=Red>-></font> ByteString+<a name="(line77)"></a><font color=Blue>----</font>+<a name="(line78)"></a><font color=Blue>-- Now for the XML pretty-printing interface.</font>+<a name="(line79)"></a><font color=Blue>-- (Basically copied direct from Text.XML.HaXml.Pretty).</font>+<a name="(line80)"></a>+<a name="(line81)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-></font> ByteString+<a name="(line82)"></a><a name="prolog"></a>prolog <font color=Red>::</font> Prolog <font color=Red>-></font> ByteString+<a name="(line83)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> XMLDecl <font color=Red>-></font> ByteString+<a name="(line84)"></a><a name="misc"></a>misc <font color=Red>::</font> Misc <font color=Red>-></font> ByteString+<a name="(line85)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> Bool <font color=Red>-></font> ByteString+<a name="(line86)"></a>+<a name="(line87)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-></font> ByteString+<a name="(line88)"></a><a name="markupdecl"></a>markupdecl <font color=Red>::</font> MarkupDecl <font color=Red>-></font> ByteString+<a name="(line89)"></a><a name="cp"></a><font color=Blue>-- extsubset :: ExtSubset -> ByteString</font>+<a name="(line90)"></a><font color=Blue>-- extsubsetdecl :: ExtSubsetDecl -> ByteString</font>+<a name="(line91)"></a>cp <font color=Red>::</font> CP <font color=Red>-></font> ByteString <a name="(line92)"></a>-<a name="(line93)"></a><font color=Blue>----</font>-<a name="(line94)"></a>-<a name="(line95)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m<font color=Cyan>)</font>-<a name="(line96)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>-<a name="(line97)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line98)"></a> maybe doctypedecl dtd <font color=Cyan>$$</font>-<a name="(line99)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m2<font color=Cyan>)</font>-<a name="(line100)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml version='"</font> <font color=Cyan><></font> text v <font color=Cyan><></font> text <font color=Magenta>"'"</font> <font color=Cyan><+></font>-<a name="(line101)"></a> maybe encodingdecl e <font color=Cyan><+></font>-<a name="(line102)"></a> maybe sddecl sd <font color=Cyan><+></font>-<a name="(line103)"></a> text <font color=Magenta>"?>"</font>-<a name="(line104)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!--"</font> <font color=Cyan><+></font> text s <font color=Cyan><+></font> text <font color=Magenta>"-->"</font>-<a name="(line105)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> text s <font color=Cyan><+></font> text <font color=Magenta>"?>"</font>-<a name="(line106)"></a>sddecl sd <font color=Red>|</font> sd <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>-<a name="(line107)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>-<a name="(line108)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> Prelude<font color=Cyan>.</font>null ds <font color=Green><u>then</u></font> -<a name="(line109)"></a> hd <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line110)"></a> <font color=Green><u>else</u></font> hd <font color=Cyan><+></font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>-<a name="(line111)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]>"</font>-<a name="(line112)"></a> <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"<!DOCTYPE"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line113)"></a> maybe externalid eid-<a name="(line114)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font> <font color=Red>=</font> elementdecl e-<a name="(line115)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font> <font color=Red>=</font> attlistdecl a-<a name="(line116)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font> <font color=Red>=</font> entitydecl e-<a name="(line117)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font> <font color=Red>=</font> notationdecl n-<a name="(line118)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font> <font color=Red>=</font> misc m-<a name="(line119)"></a><font color=Blue>--markupdecl (MarkupPE p m) = peref p</font>-<a name="(line120)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>-<a name="(line121)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl ds<font color=Cyan>)</font>-<a name="(line122)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font> <font color=Red>=</font> markupdecl m-<a name="(line123)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c-<a name="(line124)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e) = peref p</font>-<a name="(line125)"></a>-<a name="(line126)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font>-<a name="(line127)"></a> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"/>"</font>-<a name="(line128)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>-<a name="(line129)"></a><font color=Blue>-- | any isText cs = text "<" <> text n <+> fsep (map attribute as) <></font>-<a name="(line130)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <></font>-<a name="(line131)"></a><font color=Blue>-- text "</" <> text n <> text ">"</font>-<a name="(line132)"></a> <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line133)"></a> text <font color=Magenta>">"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map content cs<font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line134)"></a> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line135)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty-<a name="(line136)"></a> <font color=Green><u>in</u></font> d <font color=Cyan><></font> c-<a name="(line137)"></a>-<a name="(line138)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line139)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line140)"></a>isText <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line93)"></a><a name="element"></a>element <font color=Red>::</font> Element i <font color=Red>-></font> ByteString+<a name="(line94)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-></font> ByteString+<a name="(line95)"></a><a name="content"></a>content <font color=Red>::</font> Content i <font color=Red>-></font> ByteString+<a name="(line96)"></a>+<a name="(line97)"></a><font color=Blue>----</font>+<a name="(line98)"></a>+<a name="(line99)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m<font color=Cyan>)</font>+<a name="(line100)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>+<a name="(line101)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line102)"></a> maybe doctypedecl dtd <font color=Cyan>$$</font>+<a name="(line103)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m2<font color=Cyan>)</font>+<a name="(line104)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml version='"</font> <font color=Cyan><></font> text v <font color=Cyan><></font> text <font color=Magenta>"'"</font> <font color=Cyan><+></font>+<a name="(line105)"></a> maybe encodingdecl e <font color=Cyan><+></font>+<a name="(line106)"></a> maybe sddecl sd <font color=Cyan><+></font>+<a name="(line107)"></a> text <font color=Magenta>"?>"</font>+<a name="(line108)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!--"</font> <font color=Cyan><+></font> text s <font color=Cyan><+></font> text <font color=Magenta>"-->"</font>+<a name="(line109)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> text s <font color=Cyan><+></font> text <font color=Magenta>"?>"</font>+<a name="(line110)"></a>sddecl sd <font color=Red>|</font> sd <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>+<a name="(line111)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>+<a name="(line112)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> Prelude<font color=Cyan>.</font>null ds <font color=Green><u>then</u></font>+<a name="(line113)"></a> hd <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line114)"></a> <font color=Green><u>else</u></font> hd <font color=Cyan><+></font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>+<a name="(line115)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]>"</font>+<a name="(line116)"></a> <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"<!DOCTYPE"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line117)"></a> maybe externalid eid+<a name="(line118)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font> <font color=Red>=</font> elementdecl e+<a name="(line119)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font> <font color=Red>=</font> attlistdecl a+<a name="(line120)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font> <font color=Red>=</font> entitydecl e+<a name="(line121)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font> <font color=Red>=</font> notationdecl n+<a name="(line122)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font> <font color=Red>=</font> misc m+<a name="(line123)"></a><font color=Blue>--markupdecl (MarkupPE p m) = peref p</font>+<a name="(line124)"></a><font color=Blue>-- _ (ExtSubset t ds) = maybe textdecl t $$</font>+<a name="(line125)"></a><font color=Blue>-- vcat (Prelude.map extsubsetdecl ds)</font>+<a name="(line126)"></a><font color=Blue>-- _ (ExtMarkupDecl m) = markupdecl m</font>+<a name="(line127)"></a><font color=Blue>-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c</font>+<a name="(line128)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e) = peref p</font>+<a name="(line129)"></a>+<a name="(line130)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font>+<a name="(line131)"></a> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"/>"</font>+<a name="(line132)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>+<a name="(line133)"></a><font color=Blue>-- | any isText cs = text "<" <> text n <+> fsep (map attribute as) <></font>+<a name="(line134)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <></font>+<a name="(line135)"></a><font color=Blue>-- text "</" <> text n <> text ">"</font>+<a name="(line136)"></a> <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line137)"></a> text <font color=Magenta>">"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map content cs<font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line138)"></a> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line139)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty+<a name="(line140)"></a> <font color=Green><u>in</u></font> d <font color=Cyan><></font> c <a name="(line141)"></a>-<a name="(line142)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c-<a name="(line143)"></a> <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan><></font>-<a name="(line144)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>-<a name="(line145)"></a> <font color=Cyan>,</font> text <font color=Magenta>"/>"</font><font color=Cyan>)</font>-<a name="(line146)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c-<a name="(line147)"></a><font color=Blue>-- | any isText cs = ( c <> element e, empty)</font>-<a name="(line148)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>">"</font><font color=Cyan>)</font>-<a name="(line149)"></a> <font color=Green><u>in</u></font>-<a name="(line150)"></a> <font color=Cyan>(</font> c <font color=Cyan><></font>-<a name="(line151)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line152)"></a> nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan><></font> <font color=Blue>--- $$</font>-<a name="(line153)"></a> d0 <font color=Cyan><></font> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n-<a name="(line154)"></a> <font color=Cyan>,</font> text <font color=Magenta>">"</font><font color=Cyan>)</font>-<a name="(line155)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> carryelem e c-<a name="(line156)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line157)"></a>carrycontent <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line158)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line159)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line160)"></a>-<a name="(line161)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-></font>c<font color=Red>-></font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> c <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line162)"></a>carryscan f [] c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line163)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c-<a name="(line164)"></a> <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0-<a name="(line165)"></a> <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>-<a name="(line166)"></a>-<a name="(line167)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>-<a name="(line168)"></a><font color=Blue>-- | isText (head cs) =</font>-<a name="(line169)"></a><font color=Blue>-- ( start <></font>-<a name="(line170)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <> text "</" <> text n</font>-<a name="(line171)"></a><font color=Blue>-- , text ">")</font>-<a name="(line172)"></a><font color=Blue>-- | otherwise =</font>-<a name="(line173)"></a><font color=Blue>-- let (d,c0) = foldl carrycontent (start, text ">") cs in</font>-<a name="(line174)"></a><font color=Blue>-- ( d <> c0 <> text "</" <> text n</font>-<a name="(line175)"></a><font color=Blue>-- , text ">")</font>-<a name="(line176)"></a><font color=Blue>-- where start = c <> text "<" <> text n <+> fsep (map attribute as)</font>-<a name="(line177)"></a><font color=Blue>--</font>-<a name="(line178)"></a><font color=Blue>--carrycontent (d,c) (CElem e) = let (d',c') = carryelem e c in</font>-<a name="(line179)"></a><font color=Blue>-- (d $$ nest 2 d', c')</font>-<a name="(line180)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d <> c <> chardata s, empty)</font>-<a name="(line181)"></a><font color=Blue>--carrycontent (d,c) (CRef r) = (d <> c <> reference r,empty)</font>-<a name="(line182)"></a><font color=Blue>--carrycontent (d,c) (CMisc m) = (d $$ c <> misc m, empty)</font>-<a name="(line183)"></a>-<a name="(line184)"></a>-<a name="(line185)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> text <font color=Magenta>"="</font> <font color=Cyan><></font> attvalue v-<a name="(line186)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> element e-<a name="(line187)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s-<a name="(line188)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cdsect s-<a name="(line189)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> reference r-<a name="(line190)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> misc m+<a name="(line142)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-></font> Bool+<a name="(line143)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line144)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line145)"></a>isText <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line146)"></a>+<a name="(line147)"></a><a name="carryelem"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-></font> ByteString <font color=Red>-></font> <font color=Cyan>(</font>ByteString<font color=Cyan>,</font> ByteString<font color=Cyan>)</font>+<a name="(line148)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c+<a name="(line149)"></a> <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan><></font>+<a name="(line150)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>+<a name="(line151)"></a> <font color=Cyan>,</font> text <font color=Magenta>"/>"</font><font color=Cyan>)</font>+<a name="(line152)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c+<a name="(line153)"></a><font color=Blue>-- | any isText cs = ( c <> element e, empty)</font>+<a name="(line154)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>">"</font><font color=Cyan>)</font>+<a name="(line155)"></a> <font color=Green><u>in</u></font>+<a name="(line156)"></a> <font color=Cyan>(</font> c <font color=Cyan><></font>+<a name="(line157)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line158)"></a> nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan><></font> <font color=Blue>--- $$</font>+<a name="(line159)"></a> d0 <font color=Cyan><></font> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n+<a name="(line160)"></a> <font color=Cyan>,</font> text <font color=Magenta>">"</font><font color=Cyan>)</font>+<a name="(line161)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font> Content t <font color=Red>-></font> ByteString <font color=Red>-></font> <font color=Cyan>(</font>ByteString<font color=Cyan>,</font> ByteString<font color=Cyan>)</font>+<a name="(line162)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> carryelem e c+<a name="(line163)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line164)"></a>carrycontent <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line165)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line166)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line167)"></a>+<a name="(line168)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-></font>c<font color=Red>-></font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> c <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line169)"></a>carryscan <font color=Green><u>_</u></font> [] c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line170)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c+<a name="(line171)"></a> <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0+<a name="(line172)"></a> <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>+<a name="(line173)"></a>+<a name="(line174)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>+<a name="(line175)"></a><font color=Blue>-- | isText (head cs) =</font>+<a name="(line176)"></a><font color=Blue>-- ( start <></font>+<a name="(line177)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <> text "</" <> text n</font>+<a name="(line178)"></a><font color=Blue>-- , text ">")</font>+<a name="(line179)"></a><font color=Blue>-- | otherwise =</font>+<a name="(line180)"></a><font color=Blue>-- let (d,c0) = foldl carrycontent (start, text ">") cs in</font>+<a name="(line181)"></a><font color=Blue>-- ( d <> c0 <> text "</" <> text n</font>+<a name="(line182)"></a><font color=Blue>-- , text ">")</font>+<a name="(line183)"></a><font color=Blue>-- where start = c <> text "<" <> text n <+> fsep (map attribute as)</font>+<a name="(line184)"></a><font color=Blue>--</font>+<a name="(line185)"></a><font color=Blue>--carrycontent (d,c) (CElem e) = let (d',c') = carryelem e c in</font>+<a name="(line186)"></a><font color=Blue>-- (d $$ nest 2 d', c')</font>+<a name="(line187)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d <> c <> chardata s, empty)</font>+<a name="(line188)"></a><font color=Blue>--carrycontent (d,c) (CRef r) = (d <> c <> reference r,empty)</font>+<a name="(line189)"></a><font color=Blue>--carrycontent (d,c) (CMisc m) = (d $$ c <> misc m, empty)</font>+<a name="(line190)"></a> <a name="(line191)"></a>-<a name="(line192)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ELEMENT"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line193)"></a> contentspec cs <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line194)"></a><a name="contentspec"></a>contentspec EMPTY <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>-<a name="(line195)"></a>contentspec ANY <font color=Red>=</font> text <font color=Magenta>"ANY"</font>-<a name="(line196)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font> <font color=Red>=</font> mixed m-<a name="(line197)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font> <font color=Red>=</font> cp c-<a name="(line198)"></a><font color=Blue>--contentspec (ContentPE p cs) = peref p</font>-<a name="(line199)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> modifier m-<a name="(line200)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line201)"></a> modifier m-<a name="(line202)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line203)"></a> modifier m-<a name="(line204)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c) = peref p</font>-<a name="(line205)"></a>modifier None <font color=Red>=</font> empty-<a name="(line206)"></a>modifier Query <font color=Red>=</font> text <font color=Magenta>"?"</font>-<a name="(line207)"></a>modifier Star <font color=Red>=</font> text <font color=Magenta>"*"</font>-<a name="(line208)"></a>modifier Plus <font color=Red>=</font> text <font color=Magenta>"+"</font>-<a name="(line209)"></a><a name="mixed"></a>mixed PCDATA <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>-<a name="(line210)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan><+></font>-<a name="(line211)"></a> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line212)"></a> text <font color=Magenta>")*"</font>-<a name="(line213)"></a>-<a name="(line214)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ATTLIST"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line215)"></a> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line216)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><+></font> atttype t <font color=Cyan><+></font> defaultdecl d-<a name="(line217)"></a><a name="atttype"></a>atttype StringType <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>-<a name="(line218)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> <font color=Red>=</font> tokenizedtype t-<a name="(line219)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font> <font color=Red>=</font> enumeratedtype t-<a name="(line220)"></a><a name="tokenizedtype"></a>tokenizedtype ID <font color=Red>=</font> text <font color=Magenta>"ID"</font>-<a name="(line221)"></a>tokenizedtype IDREF <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>-<a name="(line222)"></a>tokenizedtype IDREFS <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>-<a name="(line223)"></a>tokenizedtype ENTITY <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>-<a name="(line224)"></a>tokenizedtype ENTITIES <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>-<a name="(line225)"></a>tokenizedtype NMTOKEN <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>-<a name="(line226)"></a>tokenizedtype NMTOKENS <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>-<a name="(line227)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n-<a name="(line228)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e-<a name="(line229)"></a><a name="notationtype"></a>notationtype ns <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan><+></font>-<a name="(line230)"></a> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line231)"></a><a name="enumeration"></a>enumeration ns <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line232)"></a><a name="defaultdecl"></a>defaultdecl REQUIRED <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>-<a name="(line233)"></a>defaultdecl IMPLIED <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>-<a name="(line234)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan><+></font> attvalue a-<a name="(line235)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"<![INCLUDE ["</font> <font color=Cyan><+></font>-<a name="(line236)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"]]>"</font>-<a name="(line237)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<![IGNORE ["</font> <font color=Cyan><+></font>-<a name="(line238)"></a> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"]]>"</font>-<a name="(line239)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font> <font color=Red>=</font> empty-<a name="(line240)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>-<a name="(line241)"></a> <font color=Red>=</font> ignore i <font color=Cyan><+></font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map internal is<font color=Cyan>)</font>-<a name="(line242)"></a> <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<![["</font> <font color=Cyan><+></font>-<a name="(line243)"></a> ignoresectcontents ics <font color=Cyan><+></font>-<a name="(line244)"></a> text <font color=Magenta>"]]>"</font> <font color=Cyan><+></font> ignore i-<a name="(line245)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font> <font color=Red>=</font> entityref er-<a name="(line246)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font> <font color=Red>=</font> charref cr-<a name="(line247)"></a><a name="entityref"></a>entityref n <font color=Red>=</font> text <font color=Magenta>"&"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>";"</font>-<a name="(line248)"></a><a name="charref"></a>charref c <font color=Red>=</font> text <font color=Magenta>"&#"</font> <font color=Cyan><></font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>";"</font>-<a name="(line249)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font> <font color=Red>=</font> gedecl d-<a name="(line250)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font> <font color=Red>=</font> pedecl d-<a name="(line251)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font> entitydef ed <font color=Cyan><></font>-<a name="(line252)"></a> text <font color=Magenta>">"</font>-<a name="(line253)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY %"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> pedef pd <font color=Cyan><></font>-<a name="(line254)"></a> text <font color=Magenta>">"</font>-<a name="(line255)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ev-<a name="(line256)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan><+></font> maybe ndatadecl nd-<a name="(line257)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ev-<a name="(line258)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font> <font color=Red>=</font> externalid eid-<a name="(line259)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan><+></font> systemliteral sl-<a name="(line260)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan><+></font> pubidliteral i <font color=Cyan><+></font>-<a name="(line261)"></a> systemliteral sl-<a name="(line262)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan><+></font> text n-<a name="(line263)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml"</font> <font color=Cyan><+></font> maybe text vi <font color=Cyan><+></font>-<a name="(line264)"></a> encodingdecl ed <font color=Cyan><></font> text <font color=Magenta>"?>"</font>-<a name="(line265)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan><+></font> content c-<a name="(line266)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan><+></font>-<a name="(line267)"></a> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl esd<font color=Cyan>)</font>-<a name="(line268)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!NOTATION"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line269)"></a> either externalid publicid e <font color=Cyan><></font>-<a name="(line270)"></a> text <font color=Magenta>">"</font>-<a name="(line271)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan><+></font> pubidliteral p-<a name="(line272)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line273)"></a><a name="nmtoken"></a>nmtoken s <font color=Red>=</font> text s-<a name="(line274)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font>-<a name="(line275)"></a> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line276)"></a> text <font color=Magenta>"\""</font>-<a name="(line277)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>-<a name="(line278)"></a> <font color=Red>|</font> containsDoubleQuote evs <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line279)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line280)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> text s-<a name="(line281)"></a><font color=Blue>--ev (EVPERef p e) = peref p</font>-<a name="(line282)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font> <font color=Red>=</font> reference r-<a name="(line283)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>-<a name="(line284)"></a> <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line285)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line286)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>-<a name="(line287)"></a> <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line288)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line289)"></a><a name="chardata"></a>chardata s <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s-<a name="(line290)"></a><a name="cdsect"></a>cdsect c <font color=Red>=</font> text <font color=Magenta>"<![CDATA["</font> <font color=Cyan><></font> chardata c <font color=Cyan><></font> text <font color=Magenta>"]]>"</font>-<a name="(line291)"></a>-<a name="(line292)"></a><a name="toWord8"></a><font color=Blue>--toWord8 :: Char -> Word8</font>-<a name="(line293)"></a>toWord8 <font color=Red>=</font> toEnum <font color=Cyan>.</font> fromEnum-<a name="(line294)"></a>-<a name="(line295)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>-<a name="(line296)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs-<a name="(line297)"></a> <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font>-<a name="(line298)"></a> csq <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line192)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> text <font color=Magenta>"="</font> <font color=Cyan><></font> attvalue v+<a name="(line193)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> element e+<a name="(line194)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s+<a name="(line195)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cdsect s+<a name="(line196)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> reference r+<a name="(line197)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> misc m+<a name="(line198)"></a>+<a name="(line199)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-></font> ByteString+<a name="(line200)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ELEMENT"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line201)"></a> contentspec cs <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line202)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-></font> ByteString+<a name="(line203)"></a>contentspec EMPTY <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>+<a name="(line204)"></a>contentspec ANY <font color=Red>=</font> text <font color=Magenta>"ANY"</font>+<a name="(line205)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font> <font color=Red>=</font> mixed m+<a name="(line206)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font> <font color=Red>=</font> cp c+<a name="(line207)"></a><font color=Blue>--contentspec (ContentPE p cs) = peref p</font>+<a name="(line208)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> modifier m+<a name="(line209)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line210)"></a> modifier m+<a name="(line211)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line212)"></a> modifier m+<a name="(line213)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c) = peref p</font>+<a name="(line214)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-></font> ByteString+<a name="(line215)"></a>modifier None <font color=Red>=</font> empty+<a name="(line216)"></a>modifier Query <font color=Red>=</font> text <font color=Magenta>"?"</font>+<a name="(line217)"></a>modifier Star <font color=Red>=</font> text <font color=Magenta>"*"</font>+<a name="(line218)"></a>modifier Plus <font color=Red>=</font> text <font color=Magenta>"+"</font>+<a name="(line219)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-></font> ByteString+<a name="(line220)"></a>mixed PCDATA <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>+<a name="(line221)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan><+></font>+<a name="(line222)"></a> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line223)"></a> text <font color=Magenta>")*"</font>+<a name="(line224)"></a>+<a name="(line225)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-></font> ByteString+<a name="(line226)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ATTLIST"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line227)"></a> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line228)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-></font> ByteString+<a name="(line229)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><+></font> atttype t <font color=Cyan><+></font> defaultdecl d+<a name="(line230)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-></font> ByteString+<a name="(line231)"></a>atttype StringType <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>+<a name="(line232)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> <font color=Red>=</font> tokenizedtype t+<a name="(line233)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font> <font color=Red>=</font> enumeratedtype t+<a name="(line234)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-></font> ByteString+<a name="(line235)"></a>tokenizedtype ID <font color=Red>=</font> text <font color=Magenta>"ID"</font>+<a name="(line236)"></a>tokenizedtype IDREF <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>+<a name="(line237)"></a>tokenizedtype IDREFS <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>+<a name="(line238)"></a>tokenizedtype ENTITY <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>+<a name="(line239)"></a>tokenizedtype ENTITIES <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>+<a name="(line240)"></a>tokenizedtype NMTOKEN <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>+<a name="(line241)"></a>tokenizedtype NMTOKENS <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>+<a name="(line242)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-></font> ByteString+<a name="(line243)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n+<a name="(line244)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e+<a name="(line245)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-></font> ByteString+<a name="(line246)"></a>notationtype ns <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan><+></font>+<a name="(line247)"></a> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line248)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-></font> ByteString+<a name="(line249)"></a>enumeration ns <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line250)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-></font> ByteString+<a name="(line251)"></a>defaultdecl REQUIRED <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>+<a name="(line252)"></a>defaultdecl IMPLIED <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>+<a name="(line253)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan><+></font> attvalue a+<a name="(line254)"></a><a name="reference"></a><font color=Blue>--_ (IncludeSect i)= text "<![INCLUDE [" <+></font>+<a name="(line255)"></a><font color=Blue>-- vcat (Prelude.map extsubsetdecl i) <+> text "]]>"</font>+<a name="(line256)"></a><font color=Blue>-- conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+></font>+<a name="(line257)"></a><font color=Blue>-- fsep (Prelude.map ignoresectcontents i) <+> text "]]>"</font>+<a name="(line258)"></a><font color=Blue>-- -- _ (Ignore) = empty</font>+<a name="(line259)"></a><font color=Blue>-- ignoresectcontents :: IgnoreSectContents -> ByteString</font>+<a name="(line260)"></a><font color=Blue>-- _ (IgnoreSectContents i is)</font>+<a name="(line261)"></a><font color=Blue>-- = ignore i <+> vcat (Prelude.map internal is)</font>+<a name="(line262)"></a><font color=Blue>-- where internal (ics,i) = text "<![[" <+></font>+<a name="(line263)"></a><font color=Blue>-- ignoresectcontents ics <+></font>+<a name="(line264)"></a><font color=Blue>-- text "]]>" <+> ignore i</font>+<a name="(line265)"></a>reference <font color=Red>::</font> Reference <font color=Red>-></font> ByteString+<a name="(line266)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font> <font color=Red>=</font> entityref er+<a name="(line267)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font> <font color=Red>=</font> charref cr+<a name="(line268)"></a><a name="entityref"></a>entityref <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> ByteString+<a name="(line269)"></a>entityref n <font color=Red>=</font> text <font color=Magenta>"&"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>";"</font>+<a name="(line270)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=></font> a <font color=Red>-></font> ByteString+<a name="(line271)"></a>charref c <font color=Red>=</font> text <font color=Magenta>"&#"</font> <font color=Cyan><></font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>";"</font>+<a name="(line272)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-></font> ByteString+<a name="(line273)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font> <font color=Red>=</font> gedecl d+<a name="(line274)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font> <font color=Red>=</font> pedecl d+<a name="(line275)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-></font> ByteString+<a name="(line276)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font> entitydef ed <font color=Cyan><></font>+<a name="(line277)"></a> text <font color=Magenta>">"</font>+<a name="(line278)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-></font> ByteString+<a name="(line279)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY %"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> pedef pd <font color=Cyan><></font>+<a name="(line280)"></a> text <font color=Magenta>">"</font>+<a name="(line281)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-></font> ByteString+<a name="(line282)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ew+<a name="(line283)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan><+></font> maybe ndatadecl nd+<a name="(line284)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-></font> ByteString+<a name="(line285)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ew+<a name="(line286)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font> <font color=Red>=</font> externalid eid+<a name="(line287)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-></font> ByteString+<a name="(line288)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan><+></font> systemliteral sl+<a name="(line289)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan><+></font> pubidliteral i <font color=Cyan><+></font>+<a name="(line290)"></a> systemliteral sl+<a name="(line291)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-></font> ByteString+<a name="(line292)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan><+></font> text n+<a name="(line293)"></a><a name="notationdecl"></a><font color=Blue>-- _ (TextDecl vi ed) = text "<?xml" <+> maybe text vi <+></font>+<a name="(line294)"></a><font color=Blue>-- encodingdecl ed <> text "?>"</font>+<a name="(line295)"></a><font color=Blue>-- extparsedent :: ExtParsedEnt t -> ByteString</font>+<a name="(line296)"></a><font color=Blue>-- _ (ExtParsedEnt t c)= maybe textdecl t <+> content c</font>+<a name="(line297)"></a><font color=Blue>-- _ (ExtPE t esd) = maybe textdecl t <+></font>+<a name="(line298)"></a><font color=Blue>-- vcat (Prelude.map extsubsetdecl esd)</font>+<a name="(line299)"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-></font> ByteString+<a name="(line300)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!NOTATION"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line301)"></a> either externalid publicid e <font color=Cyan><></font>+<a name="(line302)"></a> text <font color=Magenta>">"</font>+<a name="(line303)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-></font> ByteString+<a name="(line304)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan><+></font> pubidliteral p+<a name="(line305)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-></font> ByteString+<a name="(line306)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line307)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> ByteString+<a name="(line308)"></a>nmtoken s <font color=Red>=</font> text s+<a name="(line309)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-></font> ByteString+<a name="(line310)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font>+<a name="(line311)"></a> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line312)"></a> text <font color=Magenta>"\""</font>+<a name="(line313)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-></font> ByteString+<a name="(line314)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>+<a name="(line315)"></a> <font color=Red>|</font> containsDoubleQuote evs <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line316)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line317)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-></font> ByteString+<a name="(line318)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> text s+<a name="(line319)"></a><font color=Blue>--ev (EVPERef p e) = peref p</font>+<a name="(line320)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font> <font color=Red>=</font> reference r+<a name="(line321)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-></font> ByteString+<a name="(line322)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>+<a name="(line323)"></a> <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line324)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line325)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-></font> ByteString+<a name="(line326)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>+<a name="(line327)"></a> <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line328)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line329)"></a><a name="chardata"></a>chardata<font color=Cyan>,</font> cdsect <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> ByteString+<a name="(line330)"></a>chardata s <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s+<a name="(line331)"></a><a name="cdsect"></a>cdsect c <font color=Red>=</font> text <font color=Magenta>"<![CDATA["</font> <font color=Cyan><></font> chardata c <font color=Cyan><></font> text <font color=Magenta>"]]>"</font>+<a name="(line332)"></a>+<a name="(line333)"></a><a name="toWord8"></a><font color=Blue>-- toWord8 :: Char -> Word8</font>+<a name="(line334)"></a>toWord8 <font color=Red>::</font> <font color=Cyan>(</font>Enum a<font color=Cyan>,</font> Enum a1<font color=Cyan>)</font> <font color=Red>=></font> a1 <font color=Red>-></font> a+<a name="(line335)"></a>toWord8 <font color=Red>=</font> toEnum <font color=Cyan>.</font> fromEnum+<a name="(line336)"></a>+<a name="(line337)"></a><a name="containsDoubleQuote"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-></font> Bool+<a name="(line338)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs+<a name="(line339)"></a> <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font>+<a name="(line340)"></a> csq <font color=Green><u>_</u></font> <font color=Red>=</font> False </pre> </html>
docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Convert.html view
@@ -15,7 +15,7 @@ <a name="(line13)"></a> <a name="(line14)"></a><a name="Record"></a><font color=Blue>---- Internal representation for database of DTD decls ----</font> <a name="(line15)"></a><a name="Record"></a><font color=Green><u>data</u></font> Record <font color=Red>=</font> R <font color=Red>[</font>AttDef<font color=Red>]</font> ContentSpec-<a name="(line16)"></a><a name="Db"></a><font color=Green><u>type</u></font> Db <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font>Record<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line16)"></a><font color=Blue>-- type Db = [(String,Record)]</font> <a name="(line17)"></a> <a name="(line18)"></a> <a name="(line19)"></a><a name="dtd2TypeDef"></a><font color=Blue>---- Build a database of DTD decls then convert them to typedefs ----</font>@@ -23,7 +23,7 @@ <a name="(line21)"></a><font color=Blue>---- Apparently multiple ATTLIST decls for the same element are permitted,</font> <a name="(line22)"></a><font color=Blue>---- although only one ELEMENT decl for it is allowed.</font> <a name="(line23)"></a>dtd2TypeDef <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>TypeDef<font color=Red>]</font>-<a name="(line24)"></a>dtd2TypeDef mds <font color=Red>=</font> +<a name="(line24)"></a>dtd2TypeDef mds <font color=Red>=</font> <a name="(line25)"></a> <font color=Cyan>(</font>concatMap convert <font color=Cyan>.</font> reverse <font color=Cyan>.</font> database []<font color=Cyan>)</font> mds <a name="(line26)"></a> <font color=Green><u>where</u></font> <a name="(line27)"></a> database db [] <font color=Red>=</font> db@@ -40,7 +40,7 @@ <a name="(line38)"></a> <font color=Blue>-- (MarkupPE _ m') -> database db (m':ms)</font> <a name="(line39)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> database db ms <a name="(line40)"></a>-<a name="(line41)"></a> replace n v [] <font color=Red>=</font> error <font color=Magenta>"dtd2TypeDef.replace: no element to replace"</font>+<a name="(line41)"></a> replace <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> [] <font color=Red>=</font> error <font color=Magenta>"dtd2TypeDef.replace: no element to replace"</font> <a name="(line42)"></a> replace n v <font color=Cyan>(</font>x<font color=Red>@</font><font color=Cyan>(</font>n0<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red><b>:</b></font>db<font color=Cyan>)</font> <a name="(line43)"></a> <font color=Red>|</font> n<font color=Cyan>==</font>n0 <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font><font color=Red><b>:</b></font> db <a name="(line44)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> x<font color=Red><b>:</b></font> replace n v db@@ -88,8 +88,8 @@ <a name="(line86)"></a>mkData <font color=Red>[</font>ts<font color=Red>]</font> fs aux n <font color=Red>=</font> <font color=Red>[</font>DataDef aux n fs <font color=Red>[</font><font color=Cyan>(</font>n<font color=Cyan>,</font> ts<font color=Cyan>)</font><font color=Red>]</font><font color=Red>]</font> <a name="(line87)"></a>mkData tss fs aux n <font color=Red>=</font> <font color=Red>[</font>DataDef aux n fs <font color=Cyan>(</font>map <font color=Cyan>(</font>mkConstr n<font color=Cyan>)</font> tss<font color=Cyan>)</font><font color=Red>]</font> <a name="(line88)"></a> <font color=Green><u>where</u></font>-<a name="(line89)"></a> mkConstr n ts <font color=Red>=</font> <font color=Cyan>(</font>mkConsName n ts<font color=Cyan>,</font> ts<font color=Cyan>)</font>-<a name="(line90)"></a> mkConsName <font color=Cyan>(</font>Name x n<font color=Cyan>)</font> sts <font color=Red>=</font> Name x <font color=Cyan>(</font>n<font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line89)"></a> mkConstr m ts <font color=Red>=</font> <font color=Cyan>(</font>mkConsName m ts<font color=Cyan>,</font> ts<font color=Cyan>)</font>+<a name="(line90)"></a> mkConsName <font color=Cyan>(</font>Name x m<font color=Cyan>)</font> sts <font color=Red>=</font> Name x <font color=Cyan>(</font>m<font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line91)"></a> flatten <font color=Cyan>(</font>Maybe st<font color=Cyan>)</font> <font color=Red>=</font> <font color=Blue>{-"Maybe_" ++ -}</font> flatten st <a name="(line92)"></a> flatten <font color=Cyan>(</font>List st<font color=Cyan>)</font> <font color=Red>=</font> <font color=Blue>{-"List_" ++ -}</font> flatten st <a name="(line93)"></a> flatten <font color=Cyan>(</font>List1 st<font color=Cyan>)</font> <font color=Red>=</font> <font color=Blue>{-"List1_" ++ -}</font> flatten st@@ -99,32 +99,33 @@ <a name="(line97)"></a> flatten <font color=Cyan>(</font>OneOf sts<font color=Cyan>)</font> <font color=Red>=</font> <font color=Blue>{-"OneOf" ++ show (length sts) ++ "_" ++ -}</font> <a name="(line98)"></a> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line99)"></a> flatten Any <font color=Red>=</font> <font color=Magenta>"Any"</font>-<a name="(line100)"></a> flatten <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> n<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> n+<a name="(line100)"></a> flatten <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> m<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> m <a name="(line101)"></a>-<a name="(line102)"></a><a name="mkAttrDef"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n StringType def<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line103)"></a> []-<a name="(line104)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line105)"></a> [] <font color=Blue>-- mkData [[String]] [] False (name n)</font>-<a name="(line106)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>NotationType nt<font color=Cyan>)</font><font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line107)"></a> <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> nt<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line108)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>Enumeration es<font color=Cyan>)</font><font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line109)"></a> <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> es<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line110)"></a> <font color=Blue>-- Default attribute values not handled here</font>-<a name="(line111)"></a>-<a name="(line112)"></a><a name="mkAttrField"></a>mkAttrField <font color=Red>::</font> String <font color=Red>-></font> AttDef <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font>-<a name="(line113)"></a>mkAttrField e <font color=Cyan>(</font>AttDef n typ req<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>name_f e n<font color=Cyan>,</font> mkType typ req<font color=Cyan>)</font>-<a name="(line114)"></a> <font color=Green><u>where</u></font>-<a name="(line115)"></a> mkType StringType REQUIRED <font color=Red>=</font> String-<a name="(line116)"></a> mkType StringType IMPLIED <font color=Red>=</font> Maybe String-<a name="(line117)"></a> mkType StringType <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font> Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>-<a name="(line118)"></a> mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED <font color=Red>=</font> String-<a name="(line119)"></a> mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED <font color=Red>=</font> Maybe String-<a name="(line120)"></a> mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line121)"></a> Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>-<a name="(line122)"></a> mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED <font color=Red>=</font> Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font>-<a name="(line123)"></a> mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED <font color=Red>=</font> Maybe <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line124)"></a> mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line125)"></a> Defaultable <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>hName <font color=Cyan>(</font>name_ac e n <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line126)"></a>+<a name="(line102)"></a><a name="mkAttrDef"></a>mkAttrDef <font color=Red>::</font> String <font color=Red>-></font> AttDef <font color=Red>-></font> <font color=Red>[</font>TypeDef<font color=Red>]</font>+<a name="(line103)"></a>mkAttrDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>AttDef <font color=Green><u>_</u></font> StringType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line104)"></a> []+<a name="(line105)"></a>mkAttrDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>AttDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line106)"></a> [] <font color=Blue>-- mkData [[String]] [] False (name n)</font>+<a name="(line107)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>NotationType nt<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line108)"></a> <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> nt<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line109)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>Enumeration es<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line110)"></a> <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> es<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line111)"></a> <font color=Blue>-- Default attribute values not handled here</font>+<a name="(line112)"></a>+<a name="(line113)"></a><a name="mkAttrField"></a>mkAttrField <font color=Red>::</font> String <font color=Red>-></font> AttDef <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font>+<a name="(line114)"></a>mkAttrField e <font color=Cyan>(</font>AttDef n typ req<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>name_f e n<font color=Cyan>,</font> mkType typ req<font color=Cyan>)</font>+<a name="(line115)"></a> <font color=Green><u>where</u></font>+<a name="(line116)"></a> mkType StringType REQUIRED <font color=Red>=</font> String+<a name="(line117)"></a> mkType StringType IMPLIED <font color=Red>=</font> Maybe String+<a name="(line118)"></a> mkType StringType <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>+<a name="(line119)"></a> mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED <font color=Red>=</font> String+<a name="(line120)"></a> mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED <font color=Red>=</font> Maybe String+<a name="(line121)"></a> mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line122)"></a> Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>+<a name="(line123)"></a> mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED <font color=Red>=</font> Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font>+<a name="(line124)"></a> mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED <font color=Red>=</font> Maybe <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line125)"></a> mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line126)"></a> Defaultable <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>hName <font color=Cyan>(</font>name_ac e n <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line127)"></a> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Instance.html view
@@ -14,8 +14,8 @@ <a name="(line12)"></a>mkInstance <font color=Red>::</font> TypeDef <font color=Red>-></font> Doc <a name="(line13)"></a> <a name="(line14)"></a><font color=Blue>-- no constructors - represents an element with empty content but attributes.</font>-<a name="(line15)"></a>mkInstance <font color=Cyan>(</font>DataDef aux n fs []<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line16)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs+<a name="(line15)"></a>mkInstance <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs []<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line16)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs <a name="(line17)"></a> frretval <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> ppHName n <font color=Green><u>else</u></font> frattr <a name="(line18)"></a> topatval <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> ppHName n <font color=Green><u>else</u></font> topat <a name="(line19)"></a> <font color=Green><u>in</u></font>@@ -83,9 +83,9 @@ <a name="(line81)"></a> <a name="(line82)"></a><font color=Blue>-- multiple constructors (real)</font> <a name="(line83)"></a>mkInstance <font color=Cyan>(</font>DataDef False n fs cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line84)"></a> <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply cs+<a name="(line84)"></a> <font color=Green><u>let</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> nameSupply cs <a name="(line85)"></a> <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs-<a name="(line86)"></a> mixattrs <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True+<a name="(line86)"></a> <font color=Green><u>_</u></font> <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True <a name="(line87)"></a> <font color=Green><u>in</u></font> <a name="(line88)"></a> text <font color=Magenta>"instance HTypeable"</font> <font color=Cyan><+></font> ppHName n <font color=Cyan><+></font> text <font color=Magenta>"where"</font> <font color=Cyan>$$</font> <a name="(line89)"></a> nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"toHType x = Defined \""</font> <font color=Cyan><></font> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\" [] []"</font> <font color=Cyan>)</font>@@ -110,8 +110,8 @@ <a name="(line108)"></a> <a name="(line109)"></a><font color=Blue>-- multiple constructors (auxiliary)</font> <a name="(line110)"></a>mkInstance <font color=Cyan>(</font>DataDef True n fs cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line111)"></a> <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply cs-<a name="(line112)"></a> <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs+<a name="(line111)"></a> <font color=Green><u>let</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> nameSupply cs+<a name="(line112)"></a> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> frattr<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> attrpats fs <a name="(line113)"></a> mixattrs <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True <a name="(line114)"></a> <font color=Green><u>in</u></font> <a name="(line115)"></a> text <font color=Magenta>"instance HTypeable"</font> <font color=Cyan><+></font> ppHName n <font color=Cyan><+></font> text <font color=Magenta>"where"</font> <font color=Cyan>$$</font>@@ -145,7 +145,7 @@ <a name="(line143)"></a><a name="SameName"></a><font color=Green><u>data</u></font> SameName <font color=Red>=</font> Same <font color=Red>|</font> Extended <a name="(line144)"></a> <a name="(line145)"></a><a name="mkInstanceAttrs"></a>mkInstanceAttrs <font color=Red>::</font> SameName <font color=Red>-></font> Name <font color=Red>-></font> AttrFields <font color=Red>-></font> Doc-<a name="(line146)"></a>mkInstanceAttrs s n [] <font color=Red>=</font> empty+<a name="(line146)"></a>mkInstanceAttrs <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> [] <font color=Red>=</font> empty <a name="(line147)"></a>mkInstanceAttrs s n fs <font color=Red>=</font> <a name="(line148)"></a> <font color=Green><u>let</u></font> ppName <font color=Red>=</font> <font color=Green><u>case</u></font> s <font color=Green><u>of</u></font> <font color=Cyan>{</font> Same<font color=Red>-></font> ppHName<font color=Cyan>;</font> Extended<font color=Red>-></font> ppAName<font color=Cyan>;</font> <font color=Cyan>}</font> <a name="(line149)"></a> <font color=Green><u>in</u></font>@@ -172,46 +172,46 @@ <a name="(line170)"></a> <a name="(line171)"></a> <a name="(line172)"></a>-<a name="(line173)"></a><a name="mkFrElem"></a>mkFrElem <font color=Red>::</font> Name <font color=Red>-></font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-></font> Doc <font color=Red>-></font> Doc-<a name="(line174)"></a>mkFrElem n sts vs inner <font color=Red>=</font>-<a name="(line175)"></a> foldr <font color=Cyan>(</font>frElem n<font color=Cyan>)</font> inner <font color=Cyan>(</font>zip3 sts vs cvs<font color=Cyan>)</font>-<a name="(line176)"></a> <font color=Green><u>where</u></font>-<a name="(line177)"></a> cvs <font color=Red>=</font> <font color=Green><u>let</u></font> ns <font color=Red>=</font> nameSupply2 vs-<a name="(line178)"></a> <font color=Green><u>in</u></font> zip ns <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Red><b>:</b></font> init ns<font color=Cyan>)</font>-<a name="(line179)"></a> frElem n <font color=Cyan>(</font>st<font color=Cyan>,</font>v<font color=Cyan>,</font><font color=Cyan>(</font>cvi<font color=Cyan>,</font>cvo<font color=Cyan>)</font><font color=Cyan>)</font> inner <font color=Red>=</font>-<a name="(line180)"></a> parens <font color=Cyan>(</font>text <font color=Magenta>"\\"</font> <font color=Cyan><></font> parens <font color=Cyan>(</font>v<font color=Cyan><></font>comma<font color=Cyan><></font>cvi<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"->"</font> <font color=Cyan>$$</font>-<a name="(line181)"></a> nest <font color=Magenta>2</font> inner<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line182)"></a> parens <font color=Cyan>(</font>-<a name="(line183)"></a> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line184)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromText"</font> <font color=Cyan><+></font> cvo-<a name="(line185)"></a> <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromElem"</font> <font color=Cyan><+></font> cvo-<a name="(line186)"></a> <font color=Cyan>(</font>List String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"many fromText"</font> <font color=Cyan><+></font> cvo-<a name="(line187)"></a> <font color=Cyan>(</font>List s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"many fromElem"</font> <font color=Cyan><+></font> cvo-<a name="(line188)"></a> <font color=Cyan>(</font>List1 s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"definite fromElem"</font>-<a name="(line189)"></a> <font color=Cyan><+></font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text <font color=Cyan>(</font>show s<font color=Cyan>)</font><font color=Cyan><></font> text <font color=Magenta>"+\""</font>-<a name="(line190)"></a> <font color=Cyan><+></font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line191)"></a> <font color=Cyan><+></font> cvo-<a name="(line192)"></a> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"definite fromElem"</font>-<a name="(line193)"></a> <font color=Cyan><+></font> text <font color=Magenta>"\"("</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font>-<a name="(line194)"></a> <font color=Cyan>(</font>map <font color=Cyan>(</font>text<font color=Cyan>.</font>show<font color=Cyan>)</font> ss<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line195)"></a> <font color=Cyan><></font> text <font color=Magenta>")\""</font>-<a name="(line196)"></a> <font color=Cyan><+></font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line197)"></a> <font color=Cyan><+></font> cvo-<a name="(line198)"></a> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"definite fromElem"</font>-<a name="(line199)"></a> <font color=Cyan><+></font> text <font color=Magenta>"\"OneOf\""</font>-<a name="(line200)"></a> <font color=Cyan><+></font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line201)"></a> <font color=Cyan><+></font> cvo-<a name="(line202)"></a> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"definite fromText"</font> <font color=Cyan><+></font> text <font color=Magenta>"\"text\" \""</font> <font color=Cyan><></font>-<a name="(line203)"></a> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\""</font> <font color=Cyan><+></font> cvo-<a name="(line204)"></a> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"definite fromElem"</font> <font color=Cyan><+></font> text <font color=Magenta>"\"ANY\" \""</font> <font color=Cyan><></font>-<a name="(line205)"></a> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\""</font> <font color=Cyan><+></font> cvo-<a name="(line206)"></a> <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"definite fromElem"</font> <font color=Cyan><+></font>-<a name="(line207)"></a> text <font color=Magenta>"\"<"</font> <font color=Cyan><></font> ppXName m <font color=Cyan><></font> text <font color=Magenta>">\" \""</font> <font color=Cyan><></font>-<a name="(line208)"></a> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\""</font> <font color=Cyan><+></font> cvo-<a name="(line209)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font> <font color=Cyan><+></font> cvo-<a name="(line210)"></a> <font color=Cyan>)</font>+<a name="(line173)"></a><font color=Blue>-- mkFrElem :: Name -> [StructType] -> [Doc] -> Doc -> Doc</font>+<a name="(line174)"></a><font color=Blue>-- mkFrElem n sts vs inner =</font>+<a name="(line175)"></a><font color=Blue>-- foldr (frElem n) inner (zip3 sts vs cvs)</font>+<a name="(line176)"></a><font color=Blue>-- where</font>+<a name="(line177)"></a><font color=Blue>-- cvs = let ns = nameSupply2 vs</font>+<a name="(line178)"></a><font color=Blue>-- in zip ns (text "c0": init ns)</font>+<a name="(line179)"></a><font color=Blue>-- frElem _ (st,v,(cvi,cvo)) inner =</font>+<a name="(line180)"></a><font color=Blue>-- parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$</font>+<a name="(line181)"></a><font color=Blue>-- nest 2 inner) $$</font>+<a name="(line182)"></a><font color=Blue>-- parens (</font>+<a name="(line183)"></a><font color=Blue>-- case st of</font>+<a name="(line184)"></a><font color=Blue>-- (Maybe String) -> text "fromText" <+> cvo</font>+<a name="(line185)"></a><font color=Blue>-- (Maybe _) -> text "fromElem" <+> cvo</font>+<a name="(line186)"></a><font color=Blue>-- (List String) -> text "many fromText" <+> cvo</font>+<a name="(line187)"></a><font color=Blue>-- (List _) -> text "many fromElem" <+> cvo</font>+<a name="(line188)"></a><font color=Blue>-- (List1 s) -> text "definite fromElem"</font>+<a name="(line189)"></a><font color=Blue>-- <+> text "\"" <> text (show s)<> text "+\""</font>+<a name="(line190)"></a><font color=Blue>-- <+> text "\"" <> ppXName n <> text "\""</font>+<a name="(line191)"></a><font color=Blue>-- <+> cvo</font>+<a name="(line192)"></a><font color=Blue>-- (Tuple ss) -> text "definite fromElem"</font>+<a name="(line193)"></a><font color=Blue>-- <+> text "\"(" <> hcat (intersperse (text ",")</font>+<a name="(line194)"></a><font color=Blue>-- (map (text.show) ss))</font>+<a name="(line195)"></a><font color=Blue>-- <> text ")\""</font>+<a name="(line196)"></a><font color=Blue>-- <+> text "\"" <> ppXName n <> text "\""</font>+<a name="(line197)"></a><font color=Blue>-- <+> cvo</font>+<a name="(line198)"></a><font color=Blue>-- (OneOf _) -> text "definite fromElem"</font>+<a name="(line199)"></a><font color=Blue>-- <+> text "\"OneOf\""</font>+<a name="(line200)"></a><font color=Blue>-- <+> text "\"" <> ppXName n <> text "\""</font>+<a name="(line201)"></a><font color=Blue>-- <+> cvo</font>+<a name="(line202)"></a><font color=Blue>-- (String) -> text "definite fromText" <+> text "\"text\" \"" <></font>+<a name="(line203)"></a><font color=Blue>-- ppXName n <> text "\"" <+> cvo</font>+<a name="(line204)"></a><font color=Blue>-- (Any) -> text "definite fromElem" <+> text "\"ANY\" \"" <></font>+<a name="(line205)"></a><font color=Blue>-- ppXName n <> text "\"" <+> cvo</font>+<a name="(line206)"></a><font color=Blue>-- (Defined m) -> text "definite fromElem" <+></font>+<a name="(line207)"></a><font color=Blue>-- text "\"<" <> ppXName m <> text ">\" \"" <></font>+<a name="(line208)"></a><font color=Blue>-- ppXName m <> text "\"" <+> cvo</font>+<a name="(line209)"></a><font color=Blue>-- (Defaultable _ _) -> text "nyi_fromElem_Defaultable" <+> cvo</font>+<a name="(line210)"></a><font color=Blue>-- )</font> <a name="(line211)"></a>-<a name="(line212)"></a><font color=Blue>-- </font>+<a name="(line212)"></a><a name="mkParseConstr"></a><font color=Blue>--</font> <a name="(line213)"></a><font color=Blue>{- <a name="(line214)"></a>mkParseContents :: Name -> [StructType] -> [Doc] -> Doc -> Doc <a name="(line215)"></a>mkParseContents n sts vs inner =@@ -225,171 +225,173 @@ <a name="(line223)"></a> parens ( <a name="(line224)"></a> ) <a name="(line225)"></a>-}</font>-<a name="(line226)"></a>-<a name="(line227)"></a><a name="mkParseConstr"></a>mkParseConstr frattr <font color=Cyan>(</font>c<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line226)"></a>mkParseConstr <font color=Red>::</font> Doc <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font> <font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> Doc+<a name="(line227)"></a>mkParseConstr frattr <font color=Cyan>(</font>c<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line228)"></a> fsep <font color=Cyan>(</font>text <font color=Magenta>"return"</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>ppHName c <font color=Cyan><+></font> frattr<font color=Cyan>)</font> <a name="(line229)"></a> <font color=Red><b>:</b></font> map mkParseContents sts<font color=Cyan>)</font> <a name="(line230)"></a>-<a name="(line231)"></a><a name="mkParseContents"></a>mkParseContents st <font color=Red>=</font>-<a name="(line232)"></a> <font color=Green><u>let</u></font> ap <font color=Red>=</font> text <font color=Magenta>"`apply`"</font> <font color=Green><u>in</u></font>-<a name="(line233)"></a> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line234)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"optional text"</font>-<a name="(line235)"></a> <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"optional parseContents"</font>-<a name="(line236)"></a> <font color=Cyan>(</font>List String<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"many text"</font>-<a name="(line237)"></a> <font color=Cyan>(</font>List s<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"many parseContents"</font>-<a name="(line238)"></a> <font color=Cyan>(</font>List1 s<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>-<a name="(line239)"></a> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>-<a name="(line240)"></a> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>-<a name="(line241)"></a> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"(text `onFail` return \"\")"</font>-<a name="(line242)"></a> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>-<a name="(line243)"></a> <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>-<a name="(line244)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font>-<a name="(line245)"></a>-<a name="(line246)"></a><a name="mkToElem"></a><font color=Blue>--</font>-<a name="(line247)"></a>mkToElem <font color=Red>::</font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-></font> Doc-<a name="(line248)"></a>mkToElem [] [] <font color=Red>=</font> text <font color=Magenta>"[]"</font>-<a name="(line249)"></a>mkToElem sts vs <font color=Red>=</font>-<a name="(line250)"></a> fsep <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"++"</font><font color=Cyan>)</font> <font color=Cyan>(</font>zipWith toElem sts vs<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line251)"></a> <font color=Green><u>where</u></font>-<a name="(line252)"></a> toElem st v <font color=Red>=</font>-<a name="(line253)"></a> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line254)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"maybe [] toText"</font> <font color=Cyan><+></font> v-<a name="(line255)"></a> <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"maybe [] toContents"</font> <font color=Cyan><+></font> v-<a name="(line256)"></a> <font color=Cyan>(</font>List String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"concatMap toText"</font> <font color=Cyan><+></font> v-<a name="(line257)"></a> <font color=Cyan>(</font>List s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"concatMap toContents"</font> <font color=Cyan><+></font> v-<a name="(line258)"></a> <font color=Cyan>(</font>List1 s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v-<a name="(line259)"></a> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v-<a name="(line260)"></a> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v-<a name="(line261)"></a> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toText"</font> <font color=Cyan><+></font> v-<a name="(line262)"></a> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v-<a name="(line263)"></a> <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v-<a name="(line264)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"nyi_toElem_Defaultable"</font> <font color=Cyan><+></font> v-<a name="(line265)"></a>-<a name="(line266)"></a><a name="mkRpat"></a>mkRpat <font color=Red>::</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-></font> Doc-<a name="(line267)"></a>mkRpat <font color=Red>[</font>v<font color=Red>]</font> <font color=Red>=</font> v-<a name="(line268)"></a>mkRpat vs <font color=Red>=</font> <font color=Cyan>(</font>parens <font color=Cyan>.</font> hcat <font color=Cyan>.</font> intersperse comma<font color=Cyan>)</font> vs-<a name="(line269)"></a>-<a name="(line270)"></a><a name="mkCpat"></a>mkCpat <font color=Red>::</font> Name <font color=Red>-></font> Doc <font color=Red>-></font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-></font> Doc-<a name="(line271)"></a>mkCpat n i vs <font color=Red>=</font> ppHName n <font color=Cyan><+></font> i <font color=Cyan><+></font> fsep vs-<a name="(line272)"></a>-<a name="(line273)"></a><a name="nameSupply"></a>nameSupply<font color=Cyan>,</font>nameSupply2 <font color=Red>::</font> <font color=Red>[</font>b<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Doc<font color=Red>]</font>-<a name="(line274)"></a>nameSupply ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Cyan>(</font>map char <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Cyan>)</font>-<a name="(line275)"></a><a name="nameSupply2"></a>nameSupply2 ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Red>[</font> text <font color=Cyan>(</font><font color=Magenta>'c'</font><font color=Red><b>:</b></font>v<font color=Red><b>:</b></font>[]<font color=Cyan>)</font> <font color=Red>|</font> v <font color=Red><-</font> <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Red>]</font>-<a name="(line276)"></a>-<a name="(line277)"></a><a name="mkTranslate"></a>mkTranslate <font color=Red>::</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-></font> Doc-<a name="(line278)"></a>mkTranslate es <font color=Red>=</font>-<a name="(line279)"></a> vcat <font color=Cyan>(</font>map trans es<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line280)"></a> text <font color=Magenta>"translate _ = Nothing"</font>-<a name="(line281)"></a> <font color=Green><u>where</u></font>-<a name="(line282)"></a> trans n <font color=Red>=</font> text <font color=Magenta>"translate \""</font> <font color=Cyan><></font> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\" ="</font> <font color=Cyan><+></font>-<a name="(line283)"></a> text <font color=Magenta>"Just"</font> <font color=Cyan><+></font> ppHName n-<a name="(line284)"></a>-<a name="(line285)"></a><a name="mkToAttr"></a>mkToAttr n <font color=Red>=</font> text <font color=Magenta>"toAttrFrTyp n"</font> <font color=Cyan><+></font> ppHName n <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font>-<a name="(line286)"></a> text <font color=Magenta>"Just (n, str2attr"</font> <font color=Cyan><+></font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>")"</font>-<a name="(line287)"></a>-<a name="(line288)"></a><a name="mkFrFld"></a>mkFrFld <font color=Red>::</font> Name <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-></font> Doc-<a name="(line289)"></a>mkFrFld tag <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line290)"></a> ppHName n <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font>-<a name="(line291)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line292)"></a> <font color=Cyan>(</font>Defaultable String s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"defaultA fromAttrToStr"</font> <font color=Cyan><+></font>-<a name="(line293)"></a> doubleQuotes <font color=Cyan>(</font>text s<font color=Cyan>)</font>-<a name="(line294)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"defaultA fromAttrToTyp"</font> <font color=Cyan><+></font> text s-<a name="(line295)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"possibleA fromAttrToStr"</font>-<a name="(line296)"></a> <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"possibleA fromAttrToTyp"</font>-<a name="(line297)"></a> String <font color=Red>-></font> text <font color=Magenta>"definiteA fromAttrToStr"</font> <font color=Cyan><+></font>-<a name="(line298)"></a> doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>-<a name="(line299)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> text <font color=Magenta>"definiteA fromAttrToTyp"</font> <font color=Cyan><+></font>-<a name="(line300)"></a> doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>-<a name="(line301)"></a> <font color=Cyan>)</font> <font color=Cyan><+></font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"as"</font>-<a name="(line302)"></a>-<a name="(line303)"></a><a name="mkToFld"></a>mkToFld <font color=Red>::</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-></font> Doc-<a name="(line304)"></a>mkToFld <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line305)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line306)"></a> <font color=Cyan>(</font>Defaultable String <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"defaultToAttr toAttrFrStr"</font>-<a name="(line307)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"defaultToAttr toAttrFrTyp"</font>-<a name="(line308)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"maybeToAttr toAttrFrStr"</font>-<a name="(line309)"></a> <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"maybeToAttr toAttrFrTyp"</font>-<a name="(line310)"></a> String <font color=Red>-></font> text <font color=Magenta>"toAttrFrStr"</font>-<a name="(line311)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> text <font color=Magenta>"toAttrFrTyp"</font>-<a name="(line312)"></a> <font color=Cyan>)</font> <font color=Cyan><+></font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>ppHName n <font color=Cyan><+></font> text <font color=Magenta>"v"</font><font color=Cyan>)</font>-<a name="(line313)"></a>-<a name="(line314)"></a><a name="mkFrAux"></a>mkFrAux <font color=Red>::</font> Bool <font color=Red>-></font> Doc <font color=Red>-></font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-></font> Doc-<a name="(line315)"></a>mkFrAux keeprest attrs cs <font color=Red>=</font> foldr frAux inner cs-<a name="(line316)"></a> <font color=Green><u>where</u></font>-<a name="(line317)"></a> inner <font color=Red>=</font> text <font color=Magenta>"(Nothing, c0)"</font>-<a name="(line318)"></a> rest <font color=Red>=</font> <font color=Green><u>if</u></font> keeprest <font color=Green><u>then</u></font> text <font color=Magenta>"rest"</font> <font color=Green><u>else</u></font> text <font color=Magenta>"_"</font>-<a name="(line319)"></a> frAux <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> inner <font color=Red>=</font>-<a name="(line320)"></a> <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts <font color=Green><u>in</u></font>-<a name="(line321)"></a> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"case"</font> <font color=Cyan><+></font> blah sts vs <font color=Cyan><+></font> text <font color=Magenta>"of"</font> <font color=Cyan>$$</font>-<a name="(line322)"></a> succpat sts vs <font color=Cyan><+></font> text <font color=Magenta>"-> (Just"</font> <font color=Cyan><+></font>-<a name="(line323)"></a> parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>", rest)"</font>-<a name="(line324)"></a> <font color=Cyan>$$</font>-<a name="(line325)"></a> failpat sts <font color=Cyan><+></font> text <font color=Magenta>"->"</font> <font color=Cyan>$$</font> nest <font color=Magenta>4</font> inner-<a name="(line326)"></a> <font color=Cyan>)</font>-<a name="(line327)"></a> blah <font color=Red>[</font>st<font color=Red>]</font> <font color=Red>[</font>v<font color=Red>]</font> <font color=Red>=</font>-<a name="(line328)"></a> blahblahblah st <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Cyan>)</font>-<a name="(line329)"></a> blah sts vs <font color=Red>=</font>-<a name="(line330)"></a> <font color=Green><u>let</u></font> ns <font color=Red>=</font> nameSupply2 vs-<a name="(line331)"></a> cvs <font color=Red>=</font> zip ns <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Red><b>:</b></font> init ns<font color=Cyan>)</font>-<a name="(line332)"></a> blahblah <font color=Cyan>(</font>st<font color=Cyan>,</font>v<font color=Cyan>,</font><font color=Cyan>(</font>cvi<font color=Cyan>,</font>cvo<font color=Cyan>)</font><font color=Cyan>)</font> inner <font color=Red>=</font>-<a name="(line333)"></a> parens <font color=Cyan>(</font>text <font color=Magenta>"\\"</font> <font color=Cyan><></font> parens <font color=Cyan>(</font>v<font color=Cyan><></font>comma<font color=Cyan><></font>cvi<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"->"</font> <font color=Cyan>$$</font>-<a name="(line334)"></a> nest <font color=Magenta>2</font> inner<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line335)"></a> blahblahblah st cvo-<a name="(line336)"></a> <font color=Green><u>in</u></font>-<a name="(line337)"></a> foldr blahblah <font color=Cyan>(</font>mkRpat <font color=Cyan>(</font>vs<font color=Cyan>++</font><font color=Red>[</font>last ns<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>zip3 sts vs cvs<font color=Cyan>)</font>-<a name="(line338)"></a> blahblahblah st cvo <font color=Red>=</font> parens <font color=Cyan>(</font>-<a name="(line339)"></a> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line340)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromText"</font> <font color=Cyan><+></font> cvo-<a name="(line341)"></a> <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromElem"</font> <font color=Cyan><+></font> cvo-<a name="(line342)"></a> <font color=Cyan>(</font>List String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"many fromText"</font> <font color=Cyan><+></font> cvo-<a name="(line343)"></a> <font color=Cyan>(</font>List s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"many fromElem"</font> <font color=Cyan><+></font> cvo-<a name="(line344)"></a> <font color=Cyan>(</font>List1 s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromElem"</font> <font color=Cyan><+></font> cvo-<a name="(line345)"></a> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromElem"</font> <font color=Cyan><+></font> cvo <font color=Blue>-- ??</font>-<a name="(line346)"></a> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromElem"</font> <font color=Cyan><+></font> cvo-<a name="(line347)"></a> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromText"</font> <font color=Cyan><+></font> cvo-<a name="(line348)"></a> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromElem"</font> <font color=Cyan><+></font> cvo-<a name="(line349)"></a> <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"fromElem"</font> <font color=Cyan><+></font> cvo-<a name="(line350)"></a> <font color=Cyan>)</font>-<a name="(line351)"></a> failpat sts <font color=Red>=</font>-<a name="(line352)"></a> <font color=Green><u>let</u></font> fp st <font color=Red>=</font>-<a name="(line353)"></a> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line354)"></a> <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"Nothing"</font>-<a name="(line355)"></a> <font color=Cyan>(</font>List s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"[]"</font>-<a name="(line356)"></a> <font color=Cyan>(</font>List1 s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"_"</font>-<a name="(line357)"></a> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"_"</font>-<a name="(line358)"></a> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"_"</font>-<a name="(line359)"></a> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"_"</font>-<a name="(line360)"></a> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"_"</font>-<a name="(line361)"></a> <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"_"</font>-<a name="(line362)"></a> <font color=Green><u>in</u></font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse comma <font color=Cyan>(</font>map fp sts<font color=Cyan>++</font><font color=Red>[</font>text <font color=Magenta>"_"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line363)"></a> succpat sts vs <font color=Red>=</font>-<a name="(line364)"></a> <font color=Green><u>let</u></font> sp st v <font color=Red>=</font>-<a name="(line365)"></a> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line366)"></a> <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font> <font color=Red>-></font> v-<a name="(line367)"></a> <font color=Cyan>(</font>List s<font color=Cyan>)</font> <font color=Red>-></font> v-<a name="(line368)"></a> <font color=Cyan>(</font>List1 s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"Just"</font> <font color=Cyan><+></font> v-<a name="(line369)"></a> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"Just"</font> <font color=Cyan><+></font> v-<a name="(line370)"></a> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"Just"</font> <font color=Cyan><+></font> v-<a name="(line371)"></a> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"Just"</font> <font color=Cyan><+></font> v-<a name="(line372)"></a> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"Just"</font> <font color=Cyan><+></font> v-<a name="(line373)"></a> <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"Just"</font> <font color=Cyan><+></font> v-<a name="(line374)"></a> <font color=Green><u>in</u></font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse comma <font color=Cyan>(</font>zipWith sp sts vs<font color=Cyan>++</font><font color=Red>[</font>rest<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line375)"></a>-<a name="(line376)"></a><a name="mkToAux"></a>mkToAux <font color=Red>::</font> Bool <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> Doc-<a name="(line377)"></a>mkToAux mixattrs <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line378)"></a> <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts-<a name="(line379)"></a> attrs <font color=Red>=</font> <font color=Green><u>if</u></font> mixattrs <font color=Green><u>then</u></font> text <font color=Magenta>"as"</font> <font color=Green><u>else</u></font> empty-<a name="(line380)"></a> <font color=Green><u>in</u></font>-<a name="(line381)"></a> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font>-<a name="(line382)"></a> mkToElem sts vs-<a name="(line383)"></a>-<a name="(line384)"></a><a name="mkToMult"></a>mkToMult <font color=Red>::</font> Name <font color=Red>-></font> Doc <font color=Red>-></font> Doc <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> Doc-<a name="(line385)"></a>mkToMult tag attrpat attrexp <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line386)"></a> <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts-<a name="(line387)"></a> <font color=Green><u>in</u></font>-<a name="(line388)"></a> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>mkCpat n attrpat vs<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"="</font>-<a name="(line389)"></a> <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan><></font> ppXName tag <font color=Cyan><></font> text <font color=Magenta>"\""</font><font color=Cyan><+></font> attrexp-<a name="(line390)"></a> <font color=Cyan><+></font> parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>") ()]"</font><font color=Cyan>)</font>-<a name="(line391)"></a>+<a name="(line231)"></a><a name="mkParseContents"></a>mkParseContents <font color=Red>::</font> StructType <font color=Red>-></font> Doc+<a name="(line232)"></a>mkParseContents st <font color=Red>=</font>+<a name="(line233)"></a> <font color=Green><u>let</u></font> ap <font color=Red>=</font> text <font color=Magenta>"`apply`"</font> <font color=Green><u>in</u></font>+<a name="(line234)"></a> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>+<a name="(line235)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"optional text"</font>+<a name="(line236)"></a> <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"optional parseContents"</font>+<a name="(line237)"></a> <font color=Cyan>(</font>List String<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"many text"</font>+<a name="(line238)"></a> <font color=Cyan>(</font>List <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"many parseContents"</font>+<a name="(line239)"></a> <font color=Cyan>(</font>List1 <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>+<a name="(line240)"></a> <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>+<a name="(line241)"></a> <font color=Cyan>(</font>OneOf <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>+<a name="(line242)"></a> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"(text `onFail` return \"\")"</font>+<a name="(line243)"></a> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>+<a name="(line244)"></a> <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"parseContents"</font>+<a name="(line245)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> ap <font color=Cyan><+></font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font>+<a name="(line246)"></a>+<a name="(line247)"></a><a name="mkToElem"></a><font color=Blue>--</font>+<a name="(line248)"></a>mkToElem <font color=Red>::</font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-></font> Doc+<a name="(line249)"></a>mkToElem [] [] <font color=Red>=</font> text <font color=Magenta>"[]"</font>+<a name="(line250)"></a>mkToElem sts vs <font color=Red>=</font>+<a name="(line251)"></a> fsep <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"++"</font><font color=Cyan>)</font> <font color=Cyan>(</font>zipWith toElem sts vs<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line252)"></a> <font color=Green><u>where</u></font>+<a name="(line253)"></a> toElem st v <font color=Red>=</font>+<a name="(line254)"></a> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>+<a name="(line255)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"maybe [] toText"</font> <font color=Cyan><+></font> v+<a name="(line256)"></a> <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"maybe [] toContents"</font> <font color=Cyan><+></font> v+<a name="(line257)"></a> <font color=Cyan>(</font>List String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"concatMap toText"</font> <font color=Cyan><+></font> v+<a name="(line258)"></a> <font color=Cyan>(</font>List <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"concatMap toContents"</font> <font color=Cyan><+></font> v+<a name="(line259)"></a> <font color=Cyan>(</font>List1 <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v+<a name="(line260)"></a> <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v+<a name="(line261)"></a> <font color=Cyan>(</font>OneOf <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v+<a name="(line262)"></a> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toText"</font> <font color=Cyan><+></font> v+<a name="(line263)"></a> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v+<a name="(line264)"></a> <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> v+<a name="(line265)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"nyi_toElem_Defaultable"</font> <font color=Cyan><+></font> v+<a name="(line266)"></a>+<a name="(line267)"></a><font color=Blue>-- mkRpat :: [Doc] -> Doc</font>+<a name="(line268)"></a><font color=Blue>-- mkRpat [v] = v</font>+<a name="(line269)"></a><font color=Blue>-- mkRpat vs = (parens . hcat . intersperse comma) vs</font>+<a name="(line270)"></a>+<a name="(line271)"></a><a name="mkCpat"></a>mkCpat <font color=Red>::</font> Name <font color=Red>-></font> Doc <font color=Red>-></font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-></font> Doc+<a name="(line272)"></a>mkCpat n i vs <font color=Red>=</font> ppHName n <font color=Cyan><+></font> i <font color=Cyan><+></font> fsep vs+<a name="(line273)"></a>+<a name="(line274)"></a><a name="nameSupply"></a>nameSupply <font color=Red>::</font> <font color=Red>[</font>b<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Doc<font color=Red>]</font>+<a name="(line275)"></a>nameSupply ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Cyan>(</font>map char <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Cyan>)</font>+<a name="(line276)"></a><font color=Blue>-- nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v <- ['a'..]]</font>+<a name="(line277)"></a>+<a name="(line278)"></a><a name="mkTranslate"></a>mkTranslate <font color=Red>::</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-></font> Doc+<a name="(line279)"></a>mkTranslate es <font color=Red>=</font>+<a name="(line280)"></a> vcat <font color=Cyan>(</font>map trans es<font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line281)"></a> text <font color=Magenta>"translate _ = Nothing"</font>+<a name="(line282)"></a> <font color=Green><u>where</u></font>+<a name="(line283)"></a> trans n <font color=Red>=</font> text <font color=Magenta>"translate \""</font> <font color=Cyan><></font> ppXName n <font color=Cyan><></font> text <font color=Magenta>"\" ="</font> <font color=Cyan><+></font>+<a name="(line284)"></a> text <font color=Magenta>"Just"</font> <font color=Cyan><+></font> ppHName n+<a name="(line285)"></a>+<a name="(line286)"></a><a name="mkToAttr"></a>mkToAttr <font color=Red>::</font> Name <font color=Red>-></font> Doc+<a name="(line287)"></a>mkToAttr n <font color=Red>=</font> text <font color=Magenta>"toAttrFrTyp n"</font> <font color=Cyan><+></font> ppHName n <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font>+<a name="(line288)"></a> text <font color=Magenta>"Just (n, str2attr"</font> <font color=Cyan><+></font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>")"</font>+<a name="(line289)"></a>+<a name="(line290)"></a><a name="mkFrFld"></a>mkFrFld <font color=Red>::</font> Name <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-></font> Doc+<a name="(line291)"></a>mkFrFld tag <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line292)"></a> ppHName n <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font>+<a name="(line293)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>+<a name="(line294)"></a> <font color=Cyan>(</font>Defaultable String s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"defaultA fromAttrToStr"</font> <font color=Cyan><+></font>+<a name="(line295)"></a> doubleQuotes <font color=Cyan>(</font>text s<font color=Cyan>)</font>+<a name="(line296)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> s<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"defaultA fromAttrToTyp"</font> <font color=Cyan><+></font> text s+<a name="(line297)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"possibleA fromAttrToStr"</font>+<a name="(line298)"></a> <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"possibleA fromAttrToTyp"</font>+<a name="(line299)"></a> String <font color=Red>-></font> text <font color=Magenta>"definiteA fromAttrToStr"</font> <font color=Cyan><+></font>+<a name="(line300)"></a> doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>+<a name="(line301)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> text <font color=Magenta>"definiteA fromAttrToTyp"</font> <font color=Cyan><+></font>+<a name="(line302)"></a> doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>+<a name="(line303)"></a> <font color=Cyan>)</font> <font color=Cyan><+></font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"as"</font>+<a name="(line304)"></a>+<a name="(line305)"></a><a name="mkToFld"></a>mkToFld <font color=Red>::</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-></font> Doc+<a name="(line306)"></a>mkToFld <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line307)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>+<a name="(line308)"></a> <font color=Cyan>(</font>Defaultable String <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"defaultToAttr toAttrFrStr"</font>+<a name="(line309)"></a> <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"defaultToAttr toAttrFrTyp"</font>+<a name="(line310)"></a> <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"maybeToAttr toAttrFrStr"</font>+<a name="(line311)"></a> <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> text <font color=Magenta>"maybeToAttr toAttrFrTyp"</font>+<a name="(line312)"></a> String <font color=Red>-></font> text <font color=Magenta>"toAttrFrStr"</font>+<a name="(line313)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> text <font color=Magenta>"toAttrFrTyp"</font>+<a name="(line314)"></a> <font color=Cyan>)</font> <font color=Cyan><+></font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>ppHName n <font color=Cyan><+></font> text <font color=Magenta>"v"</font><font color=Cyan>)</font>+<a name="(line315)"></a>+<a name="(line316)"></a><font color=Blue>-- mkFrAux :: Bool -> Doc -> [(Name,[StructType])] -> Doc</font>+<a name="(line317)"></a><font color=Blue>-- mkFrAux keeprest attrs cs = foldr frAux inner cs</font>+<a name="(line318)"></a><font color=Blue>-- where</font>+<a name="(line319)"></a><font color=Blue>-- inner = text "(Nothing, c0)"</font>+<a name="(line320)"></a><font color=Blue>-- rest = if keeprest then text "rest" else text "_"</font>+<a name="(line321)"></a><font color=Blue>-- frAux (n,sts) innr =</font>+<a name="(line322)"></a><font color=Blue>-- let vs = nameSupply sts in</font>+<a name="(line323)"></a><font color=Blue>-- nest 4 (text "case" <+> blah sts vs <+> text "of" $$</font>+<a name="(line324)"></a><font color=Blue>-- succpat sts vs <+> text "-> (Just" <+></font>+<a name="(line325)"></a><font color=Blue>-- parens (mkCpat n attrs vs) <> text ", rest)"</font>+<a name="(line326)"></a><font color=Blue>-- $$</font>+<a name="(line327)"></a><font color=Blue>-- failpat sts <+> text "->" $$ nest 4 innr</font>+<a name="(line328)"></a><font color=Blue>-- )</font>+<a name="(line329)"></a><font color=Blue>-- blah [st] [_] =</font>+<a name="(line330)"></a><font color=Blue>-- blahblahblah st (text "c0")</font>+<a name="(line331)"></a><font color=Blue>-- blah sts vs =</font>+<a name="(line332)"></a><font color=Blue>-- let ns = nameSupply2 vs</font>+<a name="(line333)"></a><font color=Blue>-- cvs = zip ns (text "c0": init ns)</font>+<a name="(line334)"></a><font color=Blue>-- blahblah (st,v,(cvi,cvo)) innr =</font>+<a name="(line335)"></a><font color=Blue>-- parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$</font>+<a name="(line336)"></a><font color=Blue>-- nest 2 innr) $$</font>+<a name="(line337)"></a><font color=Blue>-- blahblahblah st cvo</font>+<a name="(line338)"></a><font color=Blue>-- in</font>+<a name="(line339)"></a><font color=Blue>-- foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)</font>+<a name="(line340)"></a><font color=Blue>-- blahblahblah st cvo = parens (</font>+<a name="(line341)"></a><font color=Blue>-- case st of</font>+<a name="(line342)"></a><font color=Blue>-- (Maybe String) -> text "fromText" <+> cvo</font>+<a name="(line343)"></a><font color=Blue>-- (Maybe _) -> text "fromElem" <+> cvo</font>+<a name="(line344)"></a><font color=Blue>-- (List String) -> text "many fromText" <+> cvo</font>+<a name="(line345)"></a><font color=Blue>-- (List _) -> text "many fromElem" <+> cvo</font>+<a name="(line346)"></a><font color=Blue>-- (List1 _) -> text "fromElem" <+> cvo</font>+<a name="(line347)"></a><font color=Blue>-- (Tuple _) -> text "fromElem" <+> cvo -- ??</font>+<a name="(line348)"></a><font color=Blue>-- (OneOf _) -> text "fromElem" <+> cvo</font>+<a name="(line349)"></a><font color=Blue>-- (String) -> text "fromText" <+> cvo</font>+<a name="(line350)"></a><font color=Blue>-- (Any) -> text "fromElem" <+> cvo</font>+<a name="(line351)"></a><font color=Blue>-- (Defined _) -> text "fromElem" <+> cvo</font>+<a name="(line352)"></a><font color=Blue>-- )</font>+<a name="(line353)"></a><font color=Blue>-- failpat sts =</font>+<a name="(line354)"></a><font color=Blue>-- let fp st =</font>+<a name="(line355)"></a><font color=Blue>-- case st of</font>+<a name="(line356)"></a><font color=Blue>-- (Maybe _) -> text "Nothing"</font>+<a name="(line357)"></a><font color=Blue>-- (List _) -> text "[]"</font>+<a name="(line358)"></a><font color=Blue>-- (List1 _) -> text "_"</font>+<a name="(line359)"></a><font color=Blue>-- (Tuple _) -> text "_"</font>+<a name="(line360)"></a><font color=Blue>-- (OneOf _) -> text "_"</font>+<a name="(line361)"></a><font color=Blue>-- (String) -> text "_"</font>+<a name="(line362)"></a><font color=Blue>-- (Any) -> text "_"</font>+<a name="(line363)"></a><font color=Blue>-- (Defined _) -> text "_"</font>+<a name="(line364)"></a><font color=Blue>-- in parens (hcat (intersperse comma (map fp sts++[text "_"])))</font>+<a name="(line365)"></a><font color=Blue>-- succpat sts vs =</font>+<a name="(line366)"></a><font color=Blue>-- let sp st v =</font>+<a name="(line367)"></a><font color=Blue>-- case st of</font>+<a name="(line368)"></a><font color=Blue>-- (Maybe _) -> v</font>+<a name="(line369)"></a><font color=Blue>-- (List _) -> v</font>+<a name="(line370)"></a><font color=Blue>-- (List1 _) -> text "Just" <+> v</font>+<a name="(line371)"></a><font color=Blue>-- (Tuple _) -> text "Just" <+> v</font>+<a name="(line372)"></a><font color=Blue>-- (OneOf _) -> text "Just" <+> v</font>+<a name="(line373)"></a><font color=Blue>-- (String) -> text "Just" <+> v</font>+<a name="(line374)"></a><font color=Blue>-- (Any) -> text "Just" <+> v</font>+<a name="(line375)"></a><font color=Blue>-- (Defined _) -> text "Just" <+> v</font>+<a name="(line376)"></a><font color=Blue>-- in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))</font>+<a name="(line377)"></a>+<a name="(line378)"></a><a name="mkToAux"></a>mkToAux <font color=Red>::</font> Bool <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> Doc+<a name="(line379)"></a>mkToAux mixattrs <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line380)"></a> <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts+<a name="(line381)"></a> attrs <font color=Red>=</font> <font color=Green><u>if</u></font> mixattrs <font color=Green><u>then</u></font> text <font color=Magenta>"as"</font> <font color=Green><u>else</u></font> empty+<a name="(line382)"></a> <font color=Green><u>in</u></font>+<a name="(line383)"></a> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font>+<a name="(line384)"></a> mkToElem sts vs+<a name="(line385)"></a>+<a name="(line386)"></a><a name="mkToMult"></a>mkToMult <font color=Red>::</font> Name <font color=Red>-></font> Doc <font color=Red>-></font> Doc <font color=Red>-></font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> Doc+<a name="(line387)"></a>mkToMult tag attrpat attrexp <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line388)"></a> <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts+<a name="(line389)"></a> <font color=Green><u>in</u></font>+<a name="(line390)"></a> text <font color=Magenta>"toContents"</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>mkCpat n attrpat vs<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"="</font>+<a name="(line391)"></a> <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan><></font> ppXName tag <font color=Cyan><></font> text <font color=Magenta>"\""</font><font color=Cyan><+></font> attrexp+<a name="(line392)"></a> <font color=Cyan><+></font> parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>") ()]"</font><font color=Cyan>)</font>+<a name="(line393)"></a> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/TypeDef.html view
@@ -28,25 +28,25 @@ <a name="(line26)"></a><font color=Blue>---- Internal representation for typedefs ----</font> <a name="(line27)"></a> <a name="(line28)"></a><a name="Name"></a><font color=Blue>-- | Need to keep both the XML and Haskell versions of a name.</font>-<a name="(line29)"></a><a name="Name"></a><font color=Green><u>data</u></font> Name <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>::</font> String <font color=Blue>-- ^ original XML name</font>-<a name="(line30)"></a> <font color=Cyan>,</font> hName <font color=Red>::</font> String <font color=Blue>-- ^ mangled Haskell name</font>+<a name="(line29)"></a><a name="Name"></a><font color=Green><u>data</u></font> Name <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>::</font> String <font color=Blue>-- ^ original XML name</font>+<a name="(line30)"></a> <font color=Cyan>,</font> hName <font color=Red>::</font> String <font color=Blue>-- ^ mangled Haskell name</font> <a name="(line31)"></a> <font color=Cyan>}</font> <a name="(line32)"></a> <font color=Green><u>deriving</u></font> Eq <a name="(line33)"></a> <a name="(line34)"></a><a name="TypeDef"></a><font color=Green><u>data</u></font> TypeDef <font color=Red>=</font>-<a name="(line35)"></a> DataDef Bool Name AttrFields Constructors <font color=Blue>-- ^ Bool for main\/aux.</font>+<a name="(line35)"></a> DataDef Bool Name AttrFields Constructors <font color=Blue>-- ^ Bool for main\/aux.</font> <a name="(line36)"></a> <font color=Red>|</font> EnumDef Name <font color=Red>[</font>Name<font color=Red>]</font> <a name="(line37)"></a> <font color=Green><u>deriving</u></font> Eq <a name="(line38)"></a><a name="Constructors"></a><font color=Green><u>type</u></font> Constructors <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <a name="(line39)"></a><a name="AttrFields"></a><font color=Green><u>type</u></font> AttrFields <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font> StructType<font color=Cyan>)</font><font color=Red>]</font> <a name="(line40)"></a><a name="StructType"></a><font color=Green><u>data</u></font> StructType <font color=Red>=</font> <a name="(line41)"></a> Maybe StructType-<a name="(line42)"></a> <font color=Red>|</font> Defaultable StructType String <font color=Blue>-- ^ String holds default value.</font>+<a name="(line42)"></a> <font color=Red>|</font> Defaultable StructType String <font color=Blue>-- ^ String holds default value.</font> <a name="(line43)"></a> <font color=Red>|</font> List StructType-<a name="(line44)"></a> <font color=Red>|</font> List1 StructType <font color=Blue>-- ^ Non-empty lists.</font>+<a name="(line44)"></a> <font color=Red>|</font> List1 StructType <font color=Blue>-- ^ Non-empty lists.</font> <a name="(line45)"></a> <font color=Red>|</font> Tuple <font color=Red>[</font>StructType<font color=Red>]</font> <a name="(line46)"></a> <font color=Red>|</font> OneOf <font color=Red>[</font>StructType<font color=Red>]</font>-<a name="(line47)"></a> <font color=Red>|</font> Any <font color=Blue>-- ^ XML's contentspec allows ANY</font>+<a name="(line47)"></a> <font color=Red>|</font> Any <font color=Blue>-- ^ XML's contentspec allows ANY</font> <a name="(line48)"></a> <font color=Red>|</font> String <a name="(line49)"></a> <font color=Red>|</font> Defined Name <a name="(line50)"></a> <font color=Green><u>deriving</u></font> Eq@@ -54,50 +54,50 @@ <a name="(line52)"></a><font color=Blue>-- used for converting StructType (roughly) back to an XML content model</font> <a name="(line53)"></a><font color=Green><u>instance</u></font> Show StructType <font color=Green><u>where</u></font> <a name="(line54)"></a> showsPrec p <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font> <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'?'</font>-<a name="(line55)"></a> showsPrec p <font color=Cyan>(</font>Defaultable s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> shows s+<a name="(line55)"></a> showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Defaultable s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> shows s <a name="(line56)"></a> showsPrec p <font color=Cyan>(</font>List s<font color=Cyan>)</font> <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'*'</font> <a name="(line57)"></a> showsPrec p <font color=Cyan>(</font>List1 s<font color=Cyan>)</font> <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'+'</font>-<a name="(line58)"></a> showsPrec p <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font> <font color=Red>=</font> showChar <font color=Magenta>'('</font>+<a name="(line58)"></a> showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font> <font color=Red>=</font> showChar <font color=Magenta>'('</font> <a name="(line59)"></a> <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>','</font><font color=Cyan>)</font> <a name="(line60)"></a> <font color=Cyan>(</font>map shows ss<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line61)"></a> <font color=Cyan>.</font> showChar <font color=Magenta>')'</font>-<a name="(line62)"></a> showsPrec p <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font> <font color=Red>=</font> showChar <font color=Magenta>'('</font>+<a name="(line62)"></a> showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font> <font color=Red>=</font> showChar <font color=Magenta>'('</font> <a name="(line63)"></a> <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'|'</font><font color=Cyan>)</font> <a name="(line64)"></a> <font color=Cyan>(</font>map shows ss<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line65)"></a> <font color=Cyan>.</font> showChar <font color=Magenta>')'</font>-<a name="(line66)"></a> showsPrec p <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"ANY"</font>-<a name="(line67)"></a> showsPrec p <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"#PCDATA"</font>-<a name="(line68)"></a> showsPrec p <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name n <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> showString n+<a name="(line66)"></a> showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Any<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"ANY"</font>+<a name="(line67)"></a> showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>String<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"#PCDATA"</font>+<a name="(line68)"></a> showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name n <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> showString n <a name="(line69)"></a> <a name="(line70)"></a> <a name="(line71)"></a><a name="ppTypeDef"></a><font color=Blue>---- Pretty-printing typedefs ----</font> <a name="(line72)"></a>ppTypeDef <font color=Red>::</font> TypeDef <font color=Red>-></font> Doc <a name="(line73)"></a>-<a name="(line74)"></a><font color=Blue>-- no attrs, no constructors</font>+<a name="(line74)"></a><font color=Blue>-- no attrs, no constructors</font> <a name="(line75)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] []<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line76)"></a> <font color=Green><u>let</u></font> name <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>-<a name="(line77)"></a> text <font color=Magenta>"data"</font> <font color=Cyan><+></font> name <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font> name <font color=Cyan><+></font> text <font color=Magenta>"\t\t"</font> <font color=Cyan><></font> derives+<a name="(line76)"></a> <font color=Green><u>let</u></font> nme <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>+<a name="(line77)"></a> text <font color=Magenta>"data"</font> <font color=Cyan><+></font> nme <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font> nme <font color=Cyan><+></font> text <font color=Magenta>"\t\t"</font> <font color=Cyan><></font> derives <a name="(line78)"></a>-<a name="(line79)"></a><font color=Blue>-- no attrs, single constructor</font>+<a name="(line79)"></a><font color=Blue>-- no attrs, single constructor</font> <a name="(line80)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] <font color=Red>[</font>c<font color=Red>@</font><font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Red>[</font><font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Red>=</font> <a name="(line81)"></a> text <font color=Magenta>"newtype"</font> <font color=Cyan><+></font> ppHName n <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font> ppC c <font color=Cyan><+></font> text <font color=Magenta>"\t\t"</font> <font color=Cyan><></font> derives <a name="(line82)"></a>-<a name="(line83)"></a><font color=Blue>-- no attrs, multiple constrs</font>+<a name="(line83)"></a><font color=Blue>-- no attrs, multiple constrs</font> <a name="(line84)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] cs<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line85)"></a> text <font color=Magenta>"data"</font> <font color=Cyan><+></font> ppHName n <font color=Cyan><+></font> <a name="(line86)"></a> <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan><+></font> ppC <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line87)"></a> vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-></font> text <font color=Magenta>"|"</font> <font color=Cyan><+></font> ppC c<font color=Cyan>)</font> <font color=Cyan>(</font>tail cs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line88)"></a> derives <font color=Cyan>)</font> <a name="(line89)"></a>-<a name="(line90)"></a><font color=Blue>-- nonzero attrs, no constructors</font>+<a name="(line90)"></a><font color=Blue>-- nonzero attrs, no constructors</font> <a name="(line91)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs []<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line92)"></a> <font color=Green><u>let</u></font> name <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>-<a name="(line93)"></a> text <font color=Magenta>"data"</font> <font color=Cyan><+></font> name <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font> name <font color=Cyan>$$</font>+<a name="(line92)"></a> <font color=Green><u>let</u></font> nme <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>+<a name="(line93)"></a> text <font color=Magenta>"data"</font> <font color=Cyan><+></font> nme <font color=Cyan><+></font> text <font color=Magenta>"="</font> <font color=Cyan><+></font> nme <font color=Cyan>$$</font> <a name="(line94)"></a> nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"{"</font> <font color=Cyan><+></font> ppF <font color=Cyan>(</font>head fs<font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line95)"></a> vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>f<font color=Red>-></font> text <font color=Magenta>","</font> <font color=Cyan><+></font> ppF f<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line96)"></a> text <font color=Magenta>"}"</font> <font color=Cyan><+></font> derives <font color=Cyan>)</font> <a name="(line97)"></a>-<a name="(line98)"></a><font color=Blue>-- nonzero attrs, one or more constrs</font>+<a name="(line98)"></a><font color=Blue>-- nonzero attrs, one or more constrs</font> <a name="(line99)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs cs<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line100)"></a> <font color=Green><u>let</u></font> attr <font color=Red>=</font> ppAName n <font color=Green><u>in</u></font> <a name="(line101)"></a> text <font color=Magenta>"data"</font> <font color=Cyan><+></font> ppHName n <font color=Cyan><+></font>@@ -109,7 +109,7 @@ <a name="(line107)"></a> vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>f<font color=Red>-></font> text <font color=Magenta>","</font> <font color=Cyan><+></font> ppF f<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line108)"></a> text <font color=Magenta>"}"</font> <font color=Cyan><+></font> derives <font color=Cyan>)</font> <a name="(line109)"></a>-<a name="(line110)"></a><font color=Blue>-- enumerations (of attribute values)</font>+<a name="(line110)"></a><font color=Blue>-- enumerations (of attribute values)</font> <a name="(line111)"></a>ppTypeDef <font color=Cyan>(</font>EnumDef n es<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line112)"></a> text <font color=Magenta>"data"</font> <font color=Cyan><+></font> ppHName n <font color=Cyan><+></font> <a name="(line113)"></a> <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan><+></font>@@ -150,86 +150,86 @@ <a name="(line148)"></a><a name="ppAName"></a><font color=Blue>-- | Pretty print Haskell attributes name.</font> <a name="(line149)"></a>ppAName <font color=Red>::</font> Name <font color=Red>-></font> Doc <a name="(line150)"></a>ppAName <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> s<font color=Cyan>)</font> <font color=Red>=</font> text s <font color=Cyan><></font> text <font color=Magenta>"_Attrs"</font>-<a name="(line151)"></a> -<a name="(line152)"></a><a name="derives"></a>derives <font color=Red>=</font> text <font color=Magenta>"deriving"</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>commaList <font color=Cyan>(</font>map text <font color=Red>[</font><font color=Magenta>"Eq"</font><font color=Cyan>,</font><font color=Magenta>"Show"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line153)"></a>+<a name="(line151)"></a>+<a name="(line152)"></a><a name="derives"></a>derives <font color=Red>::</font> Doc+<a name="(line153)"></a>derives <font color=Red>=</font> text <font color=Magenta>"deriving"</font> <font color=Cyan><+></font> parens <font color=Cyan>(</font>commaList <font color=Cyan>(</font>map text <font color=Red>[</font><font color=Magenta>"Eq"</font><font color=Cyan>,</font><font color=Magenta>"Show"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line154)"></a>-<a name="(line155)"></a><font color=Blue>---- Some operations on Names ----</font>-<a name="(line156)"></a>-<a name="(line157)"></a><a name="name"></a><font color=Blue>-- | Make a type name valid in both XML and Haskell.</font>-<a name="(line158)"></a>name <font color=Red>::</font> String <font color=Red>-></font> Name-<a name="(line159)"></a>name n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line160)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>}</font>-<a name="(line161)"></a>-<a name="(line162)"></a><a name="name_"></a><font color=Blue>-- | Append an underscore to the Haskell version of the name.</font>-<a name="(line163)"></a>name_ <font color=Red>::</font> String <font color=Red>-></font> Name-<a name="(line164)"></a>name_ n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line165)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>}</font>-<a name="(line166)"></a>-<a name="(line167)"></a><a name="name_a"></a><font color=Blue>-- | Prefix an attribute enumeration type name with its containing element</font>-<a name="(line168)"></a><font color=Blue>-- name.</font>-<a name="(line169)"></a>name_a <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> Name-<a name="(line170)"></a>name_a e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line171)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>-<a name="(line172)"></a>-<a name="(line173)"></a><a name="name_ac"></a><font color=Blue>-- | Prefix an attribute enumeration constructor with its element-tag name,</font>-<a name="(line174)"></a><font color=Blue>-- and its enumeration type name.</font>-<a name="(line175)"></a>name_ac <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> String <font color=Red>-></font> Name-<a name="(line176)"></a>name_ac e t n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line177)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify t-<a name="(line178)"></a> <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>-<a name="(line179)"></a>-<a name="(line180)"></a><a name="name_f"></a><font color=Blue>-- | Prefix a field name with its enclosing element name.</font>-<a name="(line181)"></a>name_f <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> Name-<a name="(line182)"></a>name_f e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line183)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> manglef e <font color=Cyan>++</font> mangle n <font color=Cyan>}</font>-<a name="(line184)"></a>-<a name="(line185)"></a><font color=Blue>---- obsolete</font>-<a name="(line186)"></a><font color=Blue>-- elementname_at :: String -> Name</font>-<a name="(line187)"></a><font color=Blue>-- elementname_at n = Name n (mangle n ++ "_Attrs")</font>-<a name="(line188)"></a>-<a name="(line189)"></a><a name="mangle"></a><font color=Blue>-- | Convert an XML name to a Haskell conid.</font>-<a name="(line190)"></a>mangle <font color=Red>::</font> String <font color=Red>-></font> String-<a name="(line191)"></a>mangle <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>-<a name="(line192)"></a> <font color=Red>|</font> isLower n <font color=Red>=</font> notPrelude <font color=Cyan>(</font>toUpper n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>-<a name="(line193)"></a> <font color=Red>|</font> isDigit n <font color=Red>=</font> <font color=Magenta>'I'</font><font color=Red><b>:</b></font> n<font color=Red><b>:</b></font> map decolonify ns-<a name="(line194)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> notPrelude <font color=Cyan>(</font>n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>-<a name="(line195)"></a>-<a name="(line196)"></a><a name="notPrelude"></a><font color=Blue>-- | Ensure a generated name does not conflict with a standard haskell one.</font>-<a name="(line197)"></a>notPrelude <font color=Red>::</font> String <font color=Red>-></font> String-<a name="(line198)"></a>notPrelude <font color=Magenta>"String"</font> <font color=Red>=</font> <font color=Magenta>"AString"</font>-<a name="(line199)"></a>notPrelude <font color=Magenta>"Maybe"</font> <font color=Red>=</font> <font color=Magenta>"AMaybe"</font>-<a name="(line200)"></a>notPrelude <font color=Magenta>"Either"</font> <font color=Red>=</font> <font color=Magenta>"AEither"</font>+<a name="(line155)"></a>+<a name="(line156)"></a><font color=Blue>---- Some operations on Names ----</font>+<a name="(line157)"></a>+<a name="(line158)"></a><a name="name"></a><font color=Blue>-- | Make a type name valid in both XML and Haskell.</font>+<a name="(line159)"></a>name <font color=Red>::</font> String <font color=Red>-></font> Name+<a name="(line160)"></a>name n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line161)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>}</font>+<a name="(line162)"></a>+<a name="(line163)"></a><a name="name_"></a><font color=Blue>-- | Append an underscore to the Haskell version of the name.</font>+<a name="(line164)"></a>name_ <font color=Red>::</font> String <font color=Red>-></font> Name+<a name="(line165)"></a>name_ n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line166)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>}</font>+<a name="(line167)"></a>+<a name="(line168)"></a><a name="name_a"></a><font color=Blue>-- | Prefix an attribute enumeration type name with its containing element</font>+<a name="(line169)"></a><font color=Blue>-- name.</font>+<a name="(line170)"></a>name_a <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> Name+<a name="(line171)"></a>name_a e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line172)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>+<a name="(line173)"></a>+<a name="(line174)"></a><a name="name_ac"></a><font color=Blue>-- | Prefix an attribute enumeration constructor with its element-tag name,</font>+<a name="(line175)"></a><font color=Blue>-- and its enumeration type name.</font>+<a name="(line176)"></a>name_ac <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> String <font color=Red>-></font> Name+<a name="(line177)"></a>name_ac e t n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line178)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify t+<a name="(line179)"></a> <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>+<a name="(line180)"></a>+<a name="(line181)"></a><a name="name_f"></a><font color=Blue>-- | Prefix a field name with its enclosing element name.</font>+<a name="(line182)"></a>name_f <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> Name+<a name="(line183)"></a>name_f e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line184)"></a> <font color=Cyan>,</font> hName <font color=Red>=</font> manglef e <font color=Cyan>++</font> mangle n <font color=Cyan>}</font>+<a name="(line185)"></a>+<a name="(line186)"></a><font color=Blue>---- obsolete</font>+<a name="(line187)"></a><font color=Blue>-- elementname_at :: String -> Name</font>+<a name="(line188)"></a><font color=Blue>-- elementname_at n = Name n (mangle n ++ "_Attrs")</font>+<a name="(line189)"></a>+<a name="(line190)"></a><a name="mangle"></a><font color=Blue>-- | Convert an XML name to a Haskell conid.</font>+<a name="(line191)"></a>mangle <font color=Red>::</font> String <font color=Red>-></font> String+<a name="(line192)"></a>mangle <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>+<a name="(line193)"></a> <font color=Red>|</font> isLower n <font color=Red>=</font> notPrelude <font color=Cyan>(</font>toUpper n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>+<a name="(line194)"></a> <font color=Red>|</font> isDigit n <font color=Red>=</font> <font color=Magenta>'I'</font><font color=Red><b>:</b></font> n<font color=Red><b>:</b></font> map decolonify ns+<a name="(line195)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> notPrelude <font color=Cyan>(</font>n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>+<a name="(line196)"></a>+<a name="(line197)"></a><a name="notPrelude"></a><font color=Blue>-- | Ensure a generated name does not conflict with a standard haskell one.</font>+<a name="(line198)"></a>notPrelude <font color=Red>::</font> String <font color=Red>-></font> String+<a name="(line199)"></a>notPrelude <font color=Magenta>"Bool"</font> <font color=Red>=</font> <font color=Magenta>"ABool"</font>+<a name="(line200)"></a>notPrelude <font color=Magenta>"Bounded"</font> <font color=Red>=</font> <font color=Magenta>"ABounded"</font> <a name="(line201)"></a>notPrelude <font color=Magenta>"Char"</font> <font color=Red>=</font> <font color=Magenta>"AChar"</font>-<a name="(line202)"></a>notPrelude <font color=Magenta>"String"</font> <font color=Red>=</font> <font color=Magenta>"AString"</font>-<a name="(line203)"></a>notPrelude <font color=Magenta>"Int"</font> <font color=Red>=</font> <font color=Magenta>"AInt"</font>-<a name="(line204)"></a>notPrelude <font color=Magenta>"Integer"</font> <font color=Red>=</font> <font color=Magenta>"AInteger"</font>-<a name="(line205)"></a>notPrelude <font color=Magenta>"Float"</font> <font color=Red>=</font> <font color=Magenta>"AFloat"</font>-<a name="(line206)"></a>notPrelude <font color=Magenta>"Double"</font> <font color=Red>=</font> <font color=Magenta>"ADouble"</font>-<a name="(line207)"></a>notPrelude <font color=Magenta>"List1"</font> <font color=Red>=</font> <font color=Magenta>"AList1"</font> <font color=Blue>-- part of HaXml</font>-<a name="(line208)"></a>notPrelude <font color=Magenta>"IO"</font> <font color=Red>=</font> <font color=Magenta>"AIO"</font>-<a name="(line209)"></a>notPrelude <font color=Magenta>"IOError"</font> <font color=Red>=</font> <font color=Magenta>"AIOError"</font>-<a name="(line210)"></a>notPrelude <font color=Magenta>"FilePath"</font><font color=Red>=</font> <font color=Magenta>"AFilePath"</font>-<a name="(line211)"></a>notPrelude <font color=Magenta>"Bool"</font> <font color=Red>=</font> <font color=Magenta>"ABool"</font>-<a name="(line212)"></a>notPrelude <font color=Magenta>"Ordering"</font><font color=Red>=</font> <font color=Magenta>"AOrdering"</font>-<a name="(line213)"></a>notPrelude <font color=Magenta>"Eq"</font> <font color=Red>=</font> <font color=Magenta>"AEq"</font>-<a name="(line214)"></a>notPrelude <font color=Magenta>"Ord"</font> <font color=Red>=</font> <font color=Magenta>"AOrd"</font>-<a name="(line215)"></a>notPrelude <font color=Magenta>"Enum"</font> <font color=Red>=</font> <font color=Magenta>"AEnum"</font>-<a name="(line216)"></a>notPrelude <font color=Magenta>"Bounded"</font> <font color=Red>=</font> <font color=Magenta>"ABounded"</font>-<a name="(line217)"></a>notPrelude <font color=Magenta>"Functor"</font> <font color=Red>=</font> <font color=Magenta>"AFunctor"</font>+<a name="(line202)"></a>notPrelude <font color=Magenta>"Double"</font> <font color=Red>=</font> <font color=Magenta>"ADouble"</font>+<a name="(line203)"></a>notPrelude <font color=Magenta>"Either"</font> <font color=Red>=</font> <font color=Magenta>"AEither"</font>+<a name="(line204)"></a>notPrelude <font color=Magenta>"Enum"</font> <font color=Red>=</font> <font color=Magenta>"AEnum"</font>+<a name="(line205)"></a>notPrelude <font color=Magenta>"Eq"</font> <font color=Red>=</font> <font color=Magenta>"AEq"</font>+<a name="(line206)"></a>notPrelude <font color=Magenta>"FilePath"</font><font color=Red>=</font> <font color=Magenta>"AFilePath"</font>+<a name="(line207)"></a>notPrelude <font color=Magenta>"Float"</font> <font color=Red>=</font> <font color=Magenta>"AFloat"</font>+<a name="(line208)"></a>notPrelude <font color=Magenta>"Floating"</font><font color=Red>=</font> <font color=Magenta>"AFloating"</font>+<a name="(line209)"></a>notPrelude <font color=Magenta>"Fractional"</font><font color=Red>=</font> <font color=Magenta>"AFractional"</font>+<a name="(line210)"></a>notPrelude <font color=Magenta>"Functor"</font> <font color=Red>=</font> <font color=Magenta>"AFunctor"</font>+<a name="(line211)"></a>notPrelude <font color=Magenta>"IO"</font> <font color=Red>=</font> <font color=Magenta>"AIO"</font>+<a name="(line212)"></a>notPrelude <font color=Magenta>"IOError"</font> <font color=Red>=</font> <font color=Magenta>"AIOError"</font>+<a name="(line213)"></a>notPrelude <font color=Magenta>"Int"</font> <font color=Red>=</font> <font color=Magenta>"AInt"</font>+<a name="(line214)"></a>notPrelude <font color=Magenta>"Integer"</font> <font color=Red>=</font> <font color=Magenta>"AInteger"</font>+<a name="(line215)"></a>notPrelude <font color=Magenta>"Integral"</font><font color=Red>=</font> <font color=Magenta>"AIntegral"</font>+<a name="(line216)"></a>notPrelude <font color=Magenta>"List1"</font> <font color=Red>=</font> <font color=Magenta>"AList1"</font> <font color=Blue>-- part of HaXml</font>+<a name="(line217)"></a>notPrelude <font color=Magenta>"Maybe"</font> <font color=Red>=</font> <font color=Magenta>"AMaybe"</font> <a name="(line218)"></a>notPrelude <font color=Magenta>"Monad"</font> <font color=Red>=</font> <font color=Magenta>"AMonad"</font>-<a name="(line219)"></a>notPrelude <font color=Magenta>"Rational"</font><font color=Red>=</font> <font color=Magenta>"ARational"</font>-<a name="(line220)"></a>notPrelude <font color=Magenta>"Integral"</font><font color=Red>=</font> <font color=Magenta>"AIntegral"</font>-<a name="(line221)"></a>notPrelude <font color=Magenta>"Num"</font> <font color=Red>=</font> <font color=Magenta>"ANum"</font>-<a name="(line222)"></a>notPrelude <font color=Magenta>"Real"</font> <font color=Red>=</font> <font color=Magenta>"AReal"</font>-<a name="(line223)"></a>notPrelude <font color=Magenta>"RealFrac"</font><font color=Red>=</font> <font color=Magenta>"ARealFrac"</font>-<a name="(line224)"></a>notPrelude <font color=Magenta>"Floating"</font><font color=Red>=</font> <font color=Magenta>"AFloating"</font>-<a name="(line225)"></a>notPrelude <font color=Magenta>"RealFloat"</font> <font color=Red>=</font> <font color=Magenta>"ARealFloat"</font>-<a name="(line226)"></a>notPrelude <font color=Magenta>"Fractional"</font><font color=Red>=</font> <font color=Magenta>"AFractional"</font>-<a name="(line227)"></a>notPrelude <font color=Magenta>"Read"</font> <font color=Red>=</font> <font color=Magenta>"ARead"</font>+<a name="(line219)"></a>notPrelude <font color=Magenta>"Num"</font> <font color=Red>=</font> <font color=Magenta>"ANum"</font>+<a name="(line220)"></a>notPrelude <font color=Magenta>"Ord"</font> <font color=Red>=</font> <font color=Magenta>"AOrd"</font>+<a name="(line221)"></a>notPrelude <font color=Magenta>"Ordering"</font><font color=Red>=</font> <font color=Magenta>"AOrdering"</font>+<a name="(line222)"></a>notPrelude <font color=Magenta>"Rational"</font><font color=Red>=</font> <font color=Magenta>"ARational"</font>+<a name="(line223)"></a>notPrelude <font color=Magenta>"Read"</font> <font color=Red>=</font> <font color=Magenta>"ARead"</font>+<a name="(line224)"></a>notPrelude <font color=Magenta>"ReadS"</font> <font color=Red>=</font> <font color=Magenta>"AReadS"</font>+<a name="(line225)"></a>notPrelude <font color=Magenta>"Real"</font> <font color=Red>=</font> <font color=Magenta>"AReal"</font>+<a name="(line226)"></a>notPrelude <font color=Magenta>"RealFloat"</font> <font color=Red>=</font> <font color=Magenta>"ARealFloat"</font>+<a name="(line227)"></a>notPrelude <font color=Magenta>"RealFrac"</font><font color=Red>=</font> <font color=Magenta>"ARealFrac"</font> <a name="(line228)"></a>notPrelude <font color=Magenta>"Show"</font> <font color=Red>=</font> <font color=Magenta>"AShow"</font>-<a name="(line229)"></a>notPrelude <font color=Magenta>"ReadS"</font> <font color=Red>=</font> <font color=Magenta>"AReadS"</font>-<a name="(line230)"></a>notPrelude <font color=Magenta>"ShowS"</font> <font color=Red>=</font> <font color=Magenta>"AShowS"</font>+<a name="(line229)"></a>notPrelude <font color=Magenta>"ShowS"</font> <font color=Red>=</font> <font color=Magenta>"AShowS"</font>+<a name="(line230)"></a>notPrelude <font color=Magenta>"String"</font> <font color=Red>=</font> <font color=Magenta>"AString"</font> <a name="(line231)"></a>notPrelude n <font color=Red>=</font> n <a name="(line232)"></a> <a name="(line233)"></a><a name="manglef"></a><font color=Blue>-- | Convert an XML name to a Haskell varid.</font>@@ -246,6 +246,7 @@ <a name="(line244)"></a>decolonify <font color=Magenta>'.'</font> <font color=Red>=</font> <font color=Magenta>'_'</font> <a name="(line245)"></a>decolonify c <font color=Red>=</font> c <a name="(line246)"></a>-<a name="(line247)"></a><a name="commaList"></a>commaList <font color=Red>=</font> hcat <font color=Cyan>.</font> intersperse comma+<a name="(line247)"></a><a name="commaList"></a>commaList <font color=Red>::</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-></font> Doc+<a name="(line248)"></a>commaList <font color=Red>=</font> hcat <font color=Cyan>.</font> intersperse comma </pre> </html>
docs/HaXml/src/Text/XML/HaXml/Escape.html view
@@ -1,7 +1,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html> <pre><a name="(line1)"></a><font color=Blue>{- This module contains code for escaping/unescaping text in attributes-<a name="(line2)"></a> and elements in the HaXml Element type, replacing characters by character +<a name="(line2)"></a> and elements in the HaXml Element type, replacing characters by character <a name="(line3)"></a> references or vice-versa. Two uses are envisaged for this: <a name="(line4)"></a> <a name="(line5)"></a> (1) stopping HaXml generating incorrect XML when a character is included@@ -23,7 +23,7 @@ <a name="(line21)"></a> <font color=Blue>-- Something describing a particular set of escapes.</font> <a name="(line22)"></a> <a name="(line23)"></a> stdXmlEscaper<font color=Cyan>,</font>-<a name="(line24)"></a> <font color=Blue>-- Standard boilerplate escaper, escaping everything that is </font>+<a name="(line24)"></a> <font color=Blue>-- Standard boilerplate escaper, escaping everything that is</font> <a name="(line25)"></a> <font color=Blue>-- nonprintable, non-ASCII, or might conceivably cause problems by</font> <a name="(line26)"></a> <font color=Blue>-- parsing XML, for example quotes, < signs, and ampersands.</font> <a name="(line27)"></a>@@ -58,7 +58,7 @@ <a name="(line56)"></a> <font color=Cyan>)</font> <font color=Green><u>where</u></font> <a name="(line57)"></a> <a name="(line58)"></a><font color=Green><u>import</u></font> Char-<a name="(line59)"></a><font color=Green><u>import</u></font> Numeric+<a name="(line59)"></a><font color=Blue>-- import Numeric</font> <a name="(line60)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types <a name="(line61)"></a> <a name="(line62)"></a><font color=Magenta><em>#if __GLASGOW_HASKELL__ >= 604 || __NHC__ >= 118 || defined(__HUGS__)</em></font>@@ -100,16 +100,16 @@ <a name="(line98)"></a> <a name="(line99)"></a> <a name="(line100)"></a><a name="xmlEscape"></a>xmlEscape <font color=Red>::</font> XmlEscaper <font color=Red>-></font> Element i <font color=Red>-></font> Element i-<a name="(line101)"></a>xmlEscape xmlEscaper element <font color=Red>=</font> +<a name="(line101)"></a>xmlEscape xmlEscaper element <font color=Red>=</font> <a name="(line102)"></a> compressElement <font color=Cyan>(</font>escapeElement xmlEscaper element<font color=Cyan>)</font> <a name="(line103)"></a> <a name="(line104)"></a><a name="xmlEscapeContent"></a>xmlEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-></font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Content i<font color=Red>]</font>-<a name="(line105)"></a>xmlEscapeContent xmlEscaper cs <font color=Red>=</font> +<a name="(line105)"></a>xmlEscapeContent xmlEscaper cs <font color=Red>=</font> <a name="(line106)"></a> compressContent <font color=Cyan>(</font>escapeContent xmlEscaper cs<font color=Cyan>)</font> <a name="(line107)"></a> <a name="(line108)"></a><a name="escapeElement"></a>escapeElement <font color=Red>::</font> XmlEscaper <font color=Red>-></font> Element i <font color=Red>-></font> Element i <a name="(line109)"></a>escapeElement xmlEscaper <font color=Cyan>(</font>Elem name attributes content<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line110)"></a> Elem name <font color=Cyan>(</font>escapeAttributes xmlEscaper attributes<font color=Cyan>)</font> +<a name="(line110)"></a> Elem name <font color=Cyan>(</font>escapeAttributes xmlEscaper attributes<font color=Cyan>)</font> <a name="(line111)"></a> <font color=Cyan>(</font>escapeContent xmlEscaper content<font color=Cyan>)</font> <a name="(line112)"></a> <a name="(line113)"></a><a name="escapeAttributes"></a>escapeAttributes <font color=Red>::</font> XmlEscaper <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font>@@ -117,23 +117,23 @@ <a name="(line115)"></a> map <a name="(line116)"></a> <font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>name<font color=Cyan>,</font>av<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>name<font color=Cyan>,</font>escapeAttValue xmlEscaper av<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line117)"></a> atts-<a name="(line118)"></a> +<a name="(line118)"></a> <a name="(line119)"></a><a name="escapeAttValue"></a>escapeAttValue <font color=Red>::</font> XmlEscaper <font color=Red>-></font> AttValue <font color=Red>-></font> AttValue <a name="(line120)"></a>escapeAttValue xmlEscaper <font color=Cyan>(</font>AttValue attValList<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line121)"></a> AttValue <font color=Cyan>(</font>-<a name="(line122)"></a> concat <font color=Cyan>(</font> +<a name="(line122)"></a> concat <font color=Cyan>(</font> <a name="(line123)"></a> map <a name="(line124)"></a> <font color=Cyan>(</font><font color=Red>\</font> av <font color=Red>-></font> <font color=Green><u>case</u></font> av <font color=Green><u>of</u></font>-<a name="(line125)"></a> Right ref <font color=Red>-></font> <font color=Red>[</font>av<font color=Red>]</font>+<a name="(line125)"></a> Right <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Red>[</font>av<font color=Red>]</font> <a name="(line126)"></a> Left s <font color=Red>-></font> <a name="(line127)"></a> map-<a name="(line128)"></a> <font color=Cyan>(</font><font color=Red>\</font> c <font color=Red>-></font> <font color=Green><u>if</u></font> isEscape xmlEscaper c +<a name="(line128)"></a> <font color=Cyan>(</font><font color=Red>\</font> c <font color=Red>-></font> <font color=Green><u>if</u></font> isEscape xmlEscaper c <a name="(line129)"></a> <font color=Green><u>then</u></font> <a name="(line130)"></a> Right <font color=Cyan>(</font>mkEscape xmlEscaper c<font color=Cyan>)</font> <a name="(line131)"></a> <font color=Green><u>else</u></font> <a name="(line132)"></a> Left <font color=Red>[</font>c<font color=Red>]</font> <a name="(line133)"></a> <font color=Cyan>)</font>-<a name="(line134)"></a> s +<a name="(line134)"></a> s <a name="(line135)"></a> <font color=Cyan>)</font> <a name="(line136)"></a> attValList <a name="(line137)"></a> <font color=Cyan>)</font>@@ -153,20 +153,20 @@ <a name="(line151)"></a> CString b <font color=Red>[</font>c<font color=Red>]</font> i <a name="(line152)"></a> <font color=Cyan>)</font> <a name="(line153)"></a> str-<a name="(line154)"></a> <font color=Cyan>(</font>CElem elem i<font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>CElem <font color=Cyan>(</font>escapeElement xmlEscaper elem<font color=Cyan>)</font> i<font color=Red>]</font>+<a name="(line154)"></a> <font color=Cyan>(</font>CElem element i<font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>CElem <font color=Cyan>(</font>escapeElement xmlEscaper element<font color=Cyan>)</font> i<font color=Red>]</font> <a name="(line155)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Red>[</font>content<font color=Red>]</font> <a name="(line156)"></a> <font color=Cyan>)</font> <a name="(line157)"></a> contents <a name="(line158)"></a> <font color=Cyan>)</font> <a name="(line159)"></a> <a name="(line160)"></a><a name="mkEscape"></a>mkEscape <font color=Red>::</font> XmlEscaper <font color=Red>-></font> Char <font color=Red>-></font> Reference-<a name="(line161)"></a>mkEscape <font color=Cyan>(</font>XmlEscaper <font color=Cyan>{</font>toEscape <font color=Red>=</font> toEscape<font color=Cyan>}</font><font color=Cyan>)</font> ch <font color=Red>=</font>-<a name="(line162)"></a> <font color=Green><u>case</u></font> lookupFM toEscape ch <font color=Green><u>of</u></font>+<a name="(line161)"></a>mkEscape <font color=Cyan>(</font>XmlEscaper <font color=Cyan>{</font>toEscape <font color=Red>=</font> toescape<font color=Cyan>}</font><font color=Cyan>)</font> ch <font color=Red>=</font>+<a name="(line162)"></a> <font color=Green><u>case</u></font> lookupFM toescape ch <font color=Green><u>of</u></font> <a name="(line163)"></a> Nothing <font color=Red>-></font> RefChar <font color=Cyan>(</font>ord ch<font color=Cyan>)</font> <a name="(line164)"></a> Just str <font color=Red>-></font> RefEntity str-<a name="(line165)"></a> <font color=Green><u>where</u></font>-<a name="(line166)"></a> showHex <font color=Red>=</font> showIntAtBase <font color=Magenta>16</font> intToDigit -<a name="(line167)"></a> <font color=Blue>-- It should be, but in GHC it isn't.</font>+<a name="(line165)"></a><font color=Blue>-- where</font>+<a name="(line166)"></a><font color=Blue>-- _ = showIntAtBase 16 intToDigit</font>+<a name="(line167)"></a><font color=Blue>-- -- It should be, but in GHC it isn't.</font> <a name="(line168)"></a> <a name="(line169)"></a><font color=Blue>-- ------------------------------------------------------------------------</font> <a name="(line170)"></a><font color=Blue>-- Unescaping</font>@@ -177,7 +177,7 @@ <a name="(line175)"></a> compressElement <font color=Cyan>(</font>unEscapeElement xmlEscaper element<font color=Cyan>)</font> <a name="(line176)"></a> <a name="(line177)"></a><a name="xmlUnEscapeContent"></a>xmlUnEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-></font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Content i<font color=Red>]</font>-<a name="(line178)"></a>xmlUnEscapeContent xmlEscaper cs <font color=Red>=</font> +<a name="(line178)"></a>xmlUnEscapeContent xmlEscaper cs <font color=Red>=</font> <a name="(line179)"></a> compressContent <font color=Cyan>(</font>unEscapeContent xmlEscaper cs<font color=Cyan>)</font> <a name="(line180)"></a> <a name="(line181)"></a><a name="unEscapeElement"></a>unEscapeElement <font color=Red>::</font> XmlEscaper <font color=Red>-></font> Element i <font color=Red>-></font> Element i@@ -196,7 +196,7 @@ <a name="(line194)"></a> AttValue <font color=Cyan>(</font> <a name="(line195)"></a> map <a name="(line196)"></a> <font color=Cyan>(</font><font color=Red>\</font> av <font color=Red>-></font> <font color=Green><u>case</u></font> av <font color=Green><u>of</u></font>-<a name="(line197)"></a> Left s <font color=Red>-></font> av+<a name="(line197)"></a> Left <font color=Green><u>_</u></font> <font color=Red>-></font> av <a name="(line198)"></a> Right ref <font color=Red>-></font> <font color=Green><u>case</u></font> unEscapeChar xmlEscaper ref <font color=Green><u>of</u></font> <a name="(line199)"></a> Just c <font color=Red>-></font> Left <font color=Red>[</font>c<font color=Red>]</font> <a name="(line200)"></a> Nothing <font color=Red>-></font> av@@ -207,12 +207,12 @@ <a name="(line205)"></a><a name="unEscapeContent"></a>unEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-></font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Content i<font color=Red>]</font> <a name="(line206)"></a>unEscapeContent xmlEscaper content <font color=Red>=</font> <a name="(line207)"></a> map-<a name="(line208)"></a> <font color=Cyan>(</font><font color=Red>\</font> content <font color=Red>-></font> <font color=Green><u>case</u></font> content <font color=Green><u>of</u></font>+<a name="(line208)"></a> <font color=Cyan>(</font><font color=Red>\</font> cntnt <font color=Red>-></font> <font color=Green><u>case</u></font> cntnt <font color=Green><u>of</u></font> <a name="(line209)"></a> CRef ref i <font color=Red>-></font> <font color=Green><u>case</u></font> unEscapeChar xmlEscaper ref <font color=Green><u>of</u></font> <a name="(line210)"></a> Just c <font color=Red>-></font> CString False <font color=Red>[</font>c<font color=Red>]</font> i-<a name="(line211)"></a> Nothing <font color=Red>-></font> content-<a name="(line212)"></a> CElem elem i <font color=Red>-></font> CElem <font color=Cyan>(</font>unEscapeElement xmlEscaper elem<font color=Cyan>)</font> i-<a name="(line213)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> content+<a name="(line211)"></a> Nothing <font color=Red>-></font> cntnt+<a name="(line212)"></a> CElem element i <font color=Red>-></font> CElem <font color=Cyan>(</font>unEscapeElement xmlEscaper element<font color=Cyan>)</font> i+<a name="(line213)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> cntnt <a name="(line214)"></a> <font color=Cyan>)</font> <a name="(line215)"></a> content <a name="(line216)"></a>@@ -252,11 +252,11 @@ <a name="(line250)"></a>compressContent [] <font color=Red>=</font> [] <a name="(line251)"></a>compressContent <font color=Cyan>(</font><font color=Cyan>(</font>csb <font color=Red>@</font> <font color=Cyan>(</font>CString b1 s1 i1<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line252)"></a> <font color=Green><u>case</u></font> compressContent cs <font color=Green><u>of</u></font>-<a name="(line253)"></a> <font color=Cyan>(</font>CString b2 s2 i2<font color=Cyan>)</font> <font color=Red><b>:</b></font> cs2+<a name="(line253)"></a> <font color=Cyan>(</font>CString b2 s2 <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red><b>:</b></font> cs2 <a name="(line254)"></a> <font color=Red>|</font> b1 <font color=Cyan>==</font> b2 <a name="(line255)"></a> <font color=Red>-></font> CString b1 <font color=Cyan>(</font>s1 <font color=Cyan>++</font> s2<font color=Cyan>)</font> i1<font color=Red><b>:</b></font> cs2 <a name="(line256)"></a> cs2 <font color=Red>-></font> csb <font color=Red><b>:</b></font> cs2-<a name="(line257)"></a>compressContent <font color=Cyan>(</font>CElem element i <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> +<a name="(line257)"></a>compressContent <font color=Cyan>(</font>CElem element i <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line258)"></a> CElem <font color=Cyan>(</font>compressElement element<font color=Cyan>)</font> i <font color=Red><b>:</b></font> compressContent cs <a name="(line259)"></a>compressContent <font color=Cyan>(</font>c <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> compressContent cs <a name="(line260)"></a>@@ -268,7 +268,7 @@ <a name="(line266)"></a><a name="stdXmlEscaper"></a>stdXmlEscaper <font color=Red>::</font> XmlEscaper <a name="(line267)"></a>stdXmlEscaper <font color=Red>=</font> mkXmlEscaper <a name="(line268)"></a> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>'\60'</font><font color=Cyan>,</font><font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\62'</font><font color=Cyan>,</font><font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\38'</font><font color=Cyan>,</font><font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\39'</font><font color=Cyan>,</font><font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\34'</font><font color=Cyan>,</font><font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line269)"></a> <font color=Cyan>(</font><font color=Red>\</font> ch <font color=Red>-></font> +<a name="(line269)"></a> <font color=Cyan>(</font><font color=Red>\</font> ch <font color=Red>-></font> <a name="(line270)"></a> <font color=Green><u>let</u></font> <a name="(line271)"></a> i <font color=Red>=</font> ord ch <a name="(line272)"></a> <font color=Green><u>in</u></font>@@ -281,14 +281,14 @@ <a name="(line279)"></a> <font color=Magenta>'>'</font> <font color=Red>-></font> True <a name="(line280)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> False <a name="(line281)"></a> <font color=Cyan>)</font>-<a name="(line282)"></a> -<a name="(line283)"></a> +<a name="(line282)"></a>+<a name="(line283)"></a> <a name="(line284)"></a><a name="mkXmlEscaper"></a>mkXmlEscaper <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Char<font color=Cyan>,</font>String<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-></font> <font color=Cyan>(</font>Char <font color=Red>-></font> Bool<font color=Cyan>)</font> <font color=Red>-></font> XmlEscaper-<a name="(line285)"></a>mkXmlEscaper escapes isEscape <font color=Red>=</font>+<a name="(line285)"></a>mkXmlEscaper escapes isescape <font color=Red>=</font> <a name="(line286)"></a> XmlEscaper <font color=Cyan>{</font> <a name="(line287)"></a> toEscape <font color=Red>=</font> listToFM escapes<font color=Cyan>,</font> <a name="(line288)"></a> fromEscape <font color=Red>=</font> listToFM <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>c<font color=Cyan>,</font>str<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>str<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> escapes<font color=Cyan>)</font><font color=Cyan>,</font>-<a name="(line289)"></a> isEscape <font color=Red>=</font> isEscape+<a name="(line289)"></a> isEscape <font color=Red>=</font> isescape <a name="(line290)"></a> <font color=Cyan>}</font> <a name="(line291)"></a> </pre>
docs/HaXml/src/Text/XML/HaXml/Html/Generate.html view
@@ -31,149 +31,149 @@ <a name="(line29)"></a> <font color=Cyan>)</font> <font color=Green><u>where</u></font> <a name="(line30)"></a> <a name="(line31)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>)</font>-<a name="(line32)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>partition<font color=Cyan>)</font>-<a name="(line33)"></a>-<a name="(line34)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types-<a name="(line35)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators-<a name="(line36)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Green><u>as</u></font> Pretty-<a name="(line37)"></a>-<a name="(line38)"></a><font color=Blue>---- Constructor functions</font>-<a name="(line39)"></a>-<a name="(line40)"></a><a name="html"></a>html<font color=Cyan>,</font> hhead<font color=Cyan>,</font> htitle<font color=Cyan>,</font> hbody<font color=Cyan>,</font> h1<font color=Cyan>,</font> h2<font color=Cyan>,</font> h3<font color=Cyan>,</font> h4<font color=Cyan>,</font> hpara<font color=Cyan>,</font> hpre<font color=Cyan>,</font> hcentre<font color=Cyan>,</font>-<a name="(line41)"></a> hem<font color=Cyan>,</font> htt<font color=Cyan>,</font> hbold<font color=Cyan>,</font> htable<font color=Cyan>,</font> hrow<font color=Cyan>,</font> hcol<font color=Cyan>,</font> hdiv<font color=Cyan>,</font> hspan<font color=Cyan>,</font> margin-<a name="(line42)"></a> <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-></font> CFilter i-<a name="(line43)"></a>html <font color=Red>=</font> mkElem <font color=Magenta>"html"</font>-<a name="(line44)"></a><a name="hhead"></a>hhead <font color=Red>=</font> mkElem <font color=Magenta>"head"</font>-<a name="(line45)"></a><a name="htitle"></a>htitle <font color=Red>=</font> mkElem <font color=Magenta>"title"</font>-<a name="(line46)"></a><a name="hbody"></a>hbody <font color=Red>=</font> mkElem <font color=Magenta>"body"</font>-<a name="(line47)"></a><a name="h1"></a>h1 <font color=Red>=</font> mkElem <font color=Magenta>"h1"</font>-<a name="(line48)"></a><a name="h2"></a>h2 <font color=Red>=</font> mkElem <font color=Magenta>"h2"</font>-<a name="(line49)"></a><a name="h3"></a>h3 <font color=Red>=</font> mkElem <font color=Magenta>"h3"</font>-<a name="(line50)"></a><a name="h4"></a>h4 <font color=Red>=</font> mkElem <font color=Magenta>"h4"</font>-<a name="(line51)"></a><a name="hpara"></a>hpara <font color=Red>=</font> mkElem <font color=Magenta>"p"</font>-<a name="(line52)"></a><a name="hpre"></a>hpre <font color=Red>=</font> mkElem <font color=Magenta>"pre"</font>-<a name="(line53)"></a><a name="hcentre"></a>hcentre <font color=Red>=</font> mkElem <font color=Magenta>"center"</font>-<a name="(line54)"></a><a name="hem"></a>hem <font color=Red>=</font> mkElem <font color=Magenta>"em"</font>-<a name="(line55)"></a><a name="htt"></a>htt <font color=Red>=</font> mkElem <font color=Magenta>"tt"</font>-<a name="(line56)"></a><a name="hbold"></a>hbold <font color=Red>=</font> mkElem <font color=Magenta>"b"</font>-<a name="(line57)"></a>-<a name="(line58)"></a><a name="htable"></a>htable <font color=Red>=</font> mkElem <font color=Magenta>"table"</font>-<a name="(line59)"></a><a name="hrow"></a>hrow <font color=Red>=</font> mkElem <font color=Magenta>"tr"</font>-<a name="(line60)"></a><a name="hcol"></a>hcol <font color=Red>=</font> mkElem <font color=Magenta>"td"</font>-<a name="(line61)"></a>-<a name="(line62)"></a><a name="hdiv"></a>hdiv <font color=Red>=</font> mkElem <font color=Magenta>"div"</font>-<a name="(line63)"></a><a name="hspan"></a>hspan <font color=Red>=</font> mkElem <font color=Magenta>"span"</font>-<a name="(line64)"></a><a name="margin"></a>margin <font color=Red>=</font> mkElemAttr <font color=Magenta>"div"</font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"margin-left"</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>"2em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>,</font>-<a name="(line65)"></a> <font color=Cyan>(</font><font color=Magenta>"margin-top"</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"1em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line66)"></a>-<a name="(line67)"></a><a name="anchor"></a>anchor <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font> CFilter i<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-></font> CFilter i-<a name="(line68)"></a>anchor <font color=Red>=</font> mkElemAttr <font color=Magenta>"a"</font>-<a name="(line69)"></a>-<a name="(line70)"></a><a name="makehref"></a>makehref<font color=Cyan>,</font> anchorname <font color=Red>::</font> CFilter i <font color=Red>-></font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-></font> CFilter i-<a name="(line71)"></a>makehref r <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"href"</font><font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>]</font>-<a name="(line72)"></a><a name="anchorname"></a>anchorname n <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"name"</font><font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Red>]</font>+<a name="(line32)"></a>+<a name="(line33)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types+<a name="(line34)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators+<a name="(line35)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Green><u>as</u></font> Pretty+<a name="(line36)"></a>+<a name="(line37)"></a><font color=Blue>---- Constructor functions</font>+<a name="(line38)"></a>+<a name="(line39)"></a><a name="html"></a>html<font color=Cyan>,</font> hhead<font color=Cyan>,</font> htitle<font color=Cyan>,</font> hbody<font color=Cyan>,</font> h1<font color=Cyan>,</font> h2<font color=Cyan>,</font> h3<font color=Cyan>,</font> h4<font color=Cyan>,</font> hpara<font color=Cyan>,</font> hpre<font color=Cyan>,</font> hcentre<font color=Cyan>,</font>+<a name="(line40)"></a> hem<font color=Cyan>,</font> htt<font color=Cyan>,</font> hbold<font color=Cyan>,</font> htable<font color=Cyan>,</font> hrow<font color=Cyan>,</font> hcol<font color=Cyan>,</font> hdiv<font color=Cyan>,</font> hspan<font color=Cyan>,</font> margin+<a name="(line41)"></a> <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-></font> CFilter i+<a name="(line42)"></a>html <font color=Red>=</font> mkElem <font color=Magenta>"html"</font>+<a name="(line43)"></a><a name="hhead"></a>hhead <font color=Red>=</font> mkElem <font color=Magenta>"head"</font>+<a name="(line44)"></a><a name="htitle"></a>htitle <font color=Red>=</font> mkElem <font color=Magenta>"title"</font>+<a name="(line45)"></a><a name="hbody"></a>hbody <font color=Red>=</font> mkElem <font color=Magenta>"body"</font>+<a name="(line46)"></a><a name="h1"></a>h1 <font color=Red>=</font> mkElem <font color=Magenta>"h1"</font>+<a name="(line47)"></a><a name="h2"></a>h2 <font color=Red>=</font> mkElem <font color=Magenta>"h2"</font>+<a name="(line48)"></a><a name="h3"></a>h3 <font color=Red>=</font> mkElem <font color=Magenta>"h3"</font>+<a name="(line49)"></a><a name="h4"></a>h4 <font color=Red>=</font> mkElem <font color=Magenta>"h4"</font>+<a name="(line50)"></a><a name="hpara"></a>hpara <font color=Red>=</font> mkElem <font color=Magenta>"p"</font>+<a name="(line51)"></a><a name="hpre"></a>hpre <font color=Red>=</font> mkElem <font color=Magenta>"pre"</font>+<a name="(line52)"></a><a name="hcentre"></a>hcentre <font color=Red>=</font> mkElem <font color=Magenta>"center"</font>+<a name="(line53)"></a><a name="hem"></a>hem <font color=Red>=</font> mkElem <font color=Magenta>"em"</font>+<a name="(line54)"></a><a name="htt"></a>htt <font color=Red>=</font> mkElem <font color=Magenta>"tt"</font>+<a name="(line55)"></a><a name="hbold"></a>hbold <font color=Red>=</font> mkElem <font color=Magenta>"b"</font>+<a name="(line56)"></a>+<a name="(line57)"></a><a name="htable"></a>htable <font color=Red>=</font> mkElem <font color=Magenta>"table"</font>+<a name="(line58)"></a><a name="hrow"></a>hrow <font color=Red>=</font> mkElem <font color=Magenta>"tr"</font>+<a name="(line59)"></a><a name="hcol"></a>hcol <font color=Red>=</font> mkElem <font color=Magenta>"td"</font>+<a name="(line60)"></a>+<a name="(line61)"></a><a name="hdiv"></a>hdiv <font color=Red>=</font> mkElem <font color=Magenta>"div"</font>+<a name="(line62)"></a><a name="hspan"></a>hspan <font color=Red>=</font> mkElem <font color=Magenta>"span"</font>+<a name="(line63)"></a><a name="margin"></a>margin <font color=Red>=</font> mkElemAttr <font color=Magenta>"div"</font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"margin-left"</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>"2em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>,</font>+<a name="(line64)"></a> <font color=Cyan>(</font><font color=Magenta>"margin-top"</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"1em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>+<a name="(line65)"></a>+<a name="(line66)"></a><a name="anchor"></a>anchor <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font> CFilter i<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-></font> CFilter i+<a name="(line67)"></a>anchor <font color=Red>=</font> mkElemAttr <font color=Magenta>"a"</font>+<a name="(line68)"></a>+<a name="(line69)"></a><a name="makehref"></a>makehref<font color=Cyan>,</font> anchorname <font color=Red>::</font> CFilter i <font color=Red>-></font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-></font> CFilter i+<a name="(line70)"></a>makehref r <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"href"</font><font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>]</font>+<a name="(line71)"></a><a name="anchorname"></a>anchorname n <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"name"</font><font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Red>]</font>+<a name="(line72)"></a> <a name="(line73)"></a>-<a name="(line74)"></a>-<a name="(line75)"></a><a name="hbr"></a>hbr<font color=Cyan>,</font> hhr <font color=Red>::</font> CFilter i-<a name="(line76)"></a>hbr <font color=Red>=</font> mkElem <font color=Magenta>"br"</font> []-<a name="(line77)"></a><a name="hhr"></a>hhr <font color=Red>=</font> mkElem <font color=Magenta>"hr"</font> []+<a name="(line74)"></a><a name="hbr"></a>hbr<font color=Cyan>,</font> hhr <font color=Red>::</font> CFilter i+<a name="(line75)"></a>hbr <font color=Red>=</font> mkElem <font color=Magenta>"br"</font> []+<a name="(line76)"></a><a name="hhr"></a>hhr <font color=Red>=</font> mkElem <font color=Magenta>"hr"</font> []+<a name="(line77)"></a> <a name="(line78)"></a>-<a name="(line79)"></a>-<a name="(line80)"></a><a name="showattr"></a>showattr<font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> String <font color=Red>-></font> CFilter i-<a name="(line81)"></a>showattr n <font color=Red>=</font> find n literal-<a name="(line82)"></a><a name="!"></a><font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font> <font color=Red>=</font> literal-<a name="(line83)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>=</font> showattr-<a name="(line84)"></a>-<a name="(line85)"></a><a name="parens"></a>parens <font color=Red>::</font> CFilter i <font color=Red>-></font> CFilter i-<a name="(line86)"></a>parens f <font color=Red>=</font> cat <font color=Red>[</font> literal <font color=Magenta>"("</font><font color=Cyan>,</font> f<font color=Cyan>,</font> literal <font color=Magenta>")"</font> <font color=Red>]</font>-<a name="(line87)"></a>-<a name="(line88)"></a><a name="bullet"></a>bullet <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-></font> CFilter i-<a name="(line89)"></a>bullet <font color=Red>=</font> cat <font color=Cyan>.</font> <font color=Cyan>(</font>literal <font color=Magenta>"M-^U"</font><font color=Red><b>:</b></font><font color=Cyan>)</font>+<a name="(line79)"></a><a name="showattr"></a>showattr<font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> String <font color=Red>-></font> CFilter i+<a name="(line80)"></a>showattr n <font color=Red>=</font> find n literal+<a name="(line81)"></a><a name="!"></a><font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font> <font color=Red>=</font> literal+<a name="(line82)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>=</font> showattr+<a name="(line83)"></a>+<a name="(line84)"></a><a name="parens"></a>parens <font color=Red>::</font> CFilter i <font color=Red>-></font> CFilter i+<a name="(line85)"></a>parens f <font color=Red>=</font> cat <font color=Red>[</font> literal <font color=Magenta>"("</font><font color=Cyan>,</font> f<font color=Cyan>,</font> literal <font color=Magenta>")"</font> <font color=Red>]</font>+<a name="(line86)"></a>+<a name="(line87)"></a><a name="bullet"></a>bullet <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-></font> CFilter i+<a name="(line88)"></a>bullet <font color=Red>=</font> cat <font color=Cyan>.</font> <font color=Cyan>(</font>literal <font color=Magenta>"M-^U"</font><font color=Red><b>:</b></font><font color=Cyan>)</font>+<a name="(line89)"></a> <a name="(line90)"></a>-<a name="(line91)"></a>-<a name="(line92)"></a><font color=Blue>---- Printing function</font>-<a name="(line93)"></a>-<a name="(line94)"></a><font color=Blue>-- htmlprint :: [Content] -> String</font>-<a name="(line95)"></a><font color=Blue>-- htmlprint = concatMap cprint</font>-<a name="(line96)"></a><font color=Blue>-- where</font>-<a name="(line97)"></a><font color=Blue>-- cprint (CElem e _) = elem e </font>-<a name="(line98)"></a><font color=Blue>-- cprint (CString _ s) = s</font>-<a name="(line99)"></a><font color=Blue>-- cprint (CMisc m) = ""</font>-<a name="(line100)"></a><font color=Blue>-- </font>-<a name="(line101)"></a><font color=Blue>-- elem (Elem n as []) = "\n<"++n++attrs as++" />"</font>-<a name="(line102)"></a><font color=Blue>-- elem (Elem n as cs) = "\n<"++n++attrs as++">"++htmlprint cs++"\n</"++n++">"</font>-<a name="(line103)"></a><font color=Blue>-- </font>-<a name="(line104)"></a><font color=Blue>-- attrs = concatMap attr</font>-<a name="(line105)"></a><font color=Blue>-- attr (n,v) = " "++n++"='"++v++"'"</font>+<a name="(line91)"></a><font color=Blue>---- Printing function</font>+<a name="(line92)"></a>+<a name="(line93)"></a><font color=Blue>-- htmlprint :: [Content] -> String</font>+<a name="(line94)"></a><font color=Blue>-- htmlprint = concatMap cprint</font>+<a name="(line95)"></a><font color=Blue>-- where</font>+<a name="(line96)"></a><font color=Blue>-- cprint (CElem e _) = elem e</font>+<a name="(line97)"></a><font color=Blue>-- cprint (CString _ s) = s</font>+<a name="(line98)"></a><font color=Blue>-- cprint (CMisc m) = ""</font>+<a name="(line99)"></a><font color=Blue>--</font>+<a name="(line100)"></a><font color=Blue>-- elem (Elem n as []) = "\n<"++n++attrs as++" />"</font>+<a name="(line101)"></a><font color=Blue>-- elem (Elem n as cs) = "\n<"++n++attrs as++">"++htmlprint cs++"\n</"++n++">"</font>+<a name="(line102)"></a><font color=Blue>--</font>+<a name="(line103)"></a><font color=Blue>-- attrs = concatMap attr</font>+<a name="(line104)"></a><font color=Blue>-- attr (n,v) = " "++n++"='"++v++"'"</font>+<a name="(line105)"></a> <a name="(line106)"></a>-<a name="(line107)"></a>-<a name="(line108)"></a><a name="htmlprint"></a>htmlprint <font color=Red>::</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-></font> Pretty<font color=Cyan>.</font>Doc-<a name="(line109)"></a>htmlprint <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map cprint <font color=Cyan>.</font> foldrefs -<a name="(line110)"></a> <font color=Green><u>where</u></font>-<a name="(line111)"></a> foldrefs [] <font color=Red>=</font> []-<a name="(line112)"></a> foldrefs <font color=Cyan>(</font>CString ws s1 i<font color=Red><b>:</b></font>CRef r <font color=Green><u>_</u></font><font color=Red><b>:</b></font>CString <font color=Green><u>_</u></font> s2 <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line113)"></a> CString ws <font color=Cyan>(</font>s1<font color=Cyan>++</font><font color=Magenta>"&"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>++</font>s2<font color=Cyan>)</font> i<font color=Red><b>:</b></font> foldrefs cs-<a name="(line114)"></a> foldrefs <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> foldrefs cs-<a name="(line115)"></a>-<a name="(line116)"></a><font color=Blue>--ref (RefEntity (EntityRef n)) = n -- Actually, should look-up symtable.</font>-<a name="(line117)"></a><font color=Blue>--ref (RefChar (CharRef s)) = s</font>-<a name="(line118)"></a> ref <font color=Cyan>(</font>RefEntity n<font color=Cyan>)</font> <font color=Red>=</font> n <font color=Blue>-- Actually, should look-up symtable.</font>-<a name="(line119)"></a> ref <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Red>=</font> show s-<a name="(line120)"></a>-<a name="(line121)"></a> cprint <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> elem e-<a name="(line122)"></a> cprint <font color=Cyan>(</font>CString ws s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>(</font>map Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>fmt <font color=Magenta>60</font>-<a name="(line123)"></a> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Green><u>if</u></font> ws <font color=Green><u>then</u></font> id <font color=Green><u>else</u></font> deSpace<font color=Cyan>)</font> s<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line124)"></a> cprint <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font><font color=Magenta>"&"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>-<a name="(line125)"></a> cprint <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>empty-<a name="(line126)"></a> -<a name="(line127)"></a> elem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"<"</font> Pretty<font color=Cyan>.<></font>-<a name="(line128)"></a> Pretty<font color=Cyan>.</font>text n Pretty<font color=Cyan>.<></font>-<a name="(line129)"></a> attrs <font color=Green><u>as</u></font> Pretty<font color=Cyan>.<></font>-<a name="(line130)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>" />"</font>-<a name="(line131)"></a> elem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line132)"></a> <font color=Blue>-- ( Pretty.text "<" Pretty.<></font>-<a name="(line133)"></a> <font color=Blue>-- Pretty.text n Pretty.<></font>-<a name="(line134)"></a> <font color=Blue>-- attrs as Pretty.<></font>-<a name="(line135)"></a> <font color=Blue>-- Pretty.text ">") Pretty.$$</font>-<a name="(line136)"></a> <font color=Blue>-- Pretty.nest 6 (htmlprint cs) Pretty.$$</font>-<a name="(line137)"></a> <font color=Blue>-- ( Pretty.text "</" Pretty.<></font>-<a name="(line138)"></a> <font color=Blue>-- Pretty.text n Pretty.<></font>-<a name="(line139)"></a> <font color=Blue>-- Pretty.text ">" )</font>-<a name="(line140)"></a> Pretty<font color=Cyan>.</font>fcat <font color=Red>[</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"<"</font> Pretty<font color=Cyan>.<></font>-<a name="(line141)"></a> Pretty<font color=Cyan>.</font>text n Pretty<font color=Cyan>.<></font>-<a name="(line142)"></a> attrs <font color=Green><u>as</u></font> Pretty<font color=Cyan>.<></font>-<a name="(line143)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>">"</font><font color=Cyan>)</font>-<a name="(line144)"></a> <font color=Cyan>,</font> Pretty<font color=Cyan>.</font>nest <font color=Magenta>4</font> <font color=Cyan>(</font>htmlprint cs<font color=Cyan>)</font>-<a name="(line145)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"</"</font> Pretty<font color=Cyan>.<></font>-<a name="(line146)"></a> Pretty<font color=Cyan>.</font>text n Pretty<font color=Cyan>.<></font>-<a name="(line147)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>">"</font> <font color=Cyan>)</font>-<a name="(line148)"></a> <font color=Red>]</font>-<a name="(line149)"></a>-<a name="(line150)"></a> attrs <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map attr-<a name="(line151)"></a> attr <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line152)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>" "</font> Pretty<font color=Cyan>.<></font>-<a name="(line153)"></a> Pretty<font color=Cyan>.</font>text n Pretty<font color=Cyan>.<></font>-<a name="(line154)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>"='"</font> Pretty<font color=Cyan>.<></font>-<a name="(line155)"></a> Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>show v<font color=Cyan>)</font> Pretty<font color=Cyan>.<></font>-<a name="(line156)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>"'"</font>-<a name="(line157)"></a>-<a name="(line158)"></a> fmt n [] <font color=Red>=</font> []-<a name="(line159)"></a> fmt n s <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>top<font color=Cyan>,</font>bot<font color=Cyan>)</font> <font color=Red>=</font> splitAt n s-<a name="(line160)"></a> <font color=Cyan>(</font>word<font color=Cyan>,</font>left<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace <font color=Cyan>(</font>reverse top<font color=Cyan>)</font>-<a name="(line161)"></a> <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> length top <font color=Cyan><</font> n <font color=Green><u>then</u></font> <font color=Red>[</font>s<font color=Red>]</font>-<a name="(line162)"></a> <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> not <font color=Cyan>(</font>null left<font color=Cyan>)</font> <font color=Green><u>then</u></font>-<a name="(line163)"></a> reverse left<font color=Red><b>:</b></font> fmt n <font color=Cyan>(</font>word<font color=Cyan>++</font>bot<font color=Cyan>)</font>-<a name="(line164)"></a> <font color=Green><u>else</u></font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>big<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace s-<a name="(line165)"></a> <font color=Green><u>in</u></font> reverse big<font color=Red><b>:</b></font> fmt n rest-<a name="(line166)"></a>-<a name="(line167)"></a> deSpace [] <font color=Red>=</font> []-<a name="(line168)"></a> deSpace <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> c<font color=Cyan>==</font><font color=Magenta>'\n'</font> <font color=Red>=</font> deSpace <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>-<a name="(line169)"></a> <font color=Red>|</font> isSpace c <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace <font color=Cyan>(</font>dropWhile isSpace cs<font color=Cyan>)</font>-<a name="(line170)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace cs-<a name="(line171)"></a>-<a name="(line172)"></a> keepUntil p xs <font color=Red>=</font> select p <font color=Cyan>(</font>[]<font color=Cyan>,</font>xs<font color=Cyan>)</font>-<a name="(line173)"></a> <font color=Green><u>where</u></font> select p <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>-<a name="(line174)"></a> select p <font color=Cyan>(</font>ls<font color=Cyan>,</font><font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>|</font> p x <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font>-<a name="(line175)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> select p <font color=Cyan>(</font>x<font color=Red><b>:</b></font>ls<font color=Cyan>,</font>xs<font color=Cyan>)</font>+<a name="(line107)"></a><a name="htmlprint"></a>htmlprint <font color=Red>::</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-></font> Pretty<font color=Cyan>.</font>Doc+<a name="(line108)"></a>htmlprint <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map cprint <font color=Cyan>.</font> foldrefs+<a name="(line109)"></a> <font color=Green><u>where</u></font>+<a name="(line110)"></a> foldrefs [] <font color=Red>=</font> []+<a name="(line111)"></a> foldrefs <font color=Cyan>(</font>CString ws s1 i<font color=Red><b>:</b></font>CRef r <font color=Green><u>_</u></font><font color=Red><b>:</b></font>CString <font color=Green><u>_</u></font> s2 <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line112)"></a> CString ws <font color=Cyan>(</font>s1<font color=Cyan>++</font><font color=Magenta>"&"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>++</font>s2<font color=Cyan>)</font> i<font color=Red><b>:</b></font> foldrefs cs+<a name="(line113)"></a> foldrefs <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> foldrefs cs+<a name="(line114)"></a>+<a name="(line115)"></a><font color=Blue>--ref (RefEntity (EntityRef n)) = n -- Actually, should look-up symtable.</font>+<a name="(line116)"></a><font color=Blue>--ref (RefChar (CharRef s)) = s</font>+<a name="(line117)"></a> ref <font color=Cyan>(</font>RefEntity n<font color=Cyan>)</font> <font color=Red>=</font> n <font color=Blue>-- Actually, should look-up symtable.</font>+<a name="(line118)"></a> ref <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Red>=</font> show s+<a name="(line119)"></a>+<a name="(line120)"></a> cprint <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> element e+<a name="(line121)"></a> cprint <font color=Cyan>(</font>CString ws s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>(</font>map Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>fmt <font color=Magenta>60</font>+<a name="(line122)"></a> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Green><u>if</u></font> ws <font color=Green><u>then</u></font> id <font color=Green><u>else</u></font> deSpace<font color=Cyan>)</font> s<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line123)"></a> cprint <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font><font color=Magenta>"&"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>+<a name="(line124)"></a> cprint <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>empty+<a name="(line125)"></a>+<a name="(line126)"></a> element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"<"</font> Pretty<font color=Cyan>.<></font>+<a name="(line127)"></a> Pretty<font color=Cyan>.</font>text n Pretty<font color=Cyan>.<></font>+<a name="(line128)"></a> attrs <font color=Green><u>as</u></font> Pretty<font color=Cyan>.<></font>+<a name="(line129)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>" />"</font>+<a name="(line130)"></a> element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line131)"></a> <font color=Blue>-- ( Pretty.text "<" Pretty.<></font>+<a name="(line132)"></a> <font color=Blue>-- Pretty.text n Pretty.<></font>+<a name="(line133)"></a> <font color=Blue>-- attrs as Pretty.<></font>+<a name="(line134)"></a> <font color=Blue>-- Pretty.text ">") Pretty.$$</font>+<a name="(line135)"></a> <font color=Blue>-- Pretty.nest 6 (htmlprint cs) Pretty.$$</font>+<a name="(line136)"></a> <font color=Blue>-- ( Pretty.text "</" Pretty.<></font>+<a name="(line137)"></a> <font color=Blue>-- Pretty.text n Pretty.<></font>+<a name="(line138)"></a> <font color=Blue>-- Pretty.text ">" )</font>+<a name="(line139)"></a> Pretty<font color=Cyan>.</font>fcat <font color=Red>[</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"<"</font> Pretty<font color=Cyan>.<></font>+<a name="(line140)"></a> Pretty<font color=Cyan>.</font>text n Pretty<font color=Cyan>.<></font>+<a name="(line141)"></a> attrs <font color=Green><u>as</u></font> Pretty<font color=Cyan>.<></font>+<a name="(line142)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>">"</font><font color=Cyan>)</font>+<a name="(line143)"></a> <font color=Cyan>,</font> Pretty<font color=Cyan>.</font>nest <font color=Magenta>4</font> <font color=Cyan>(</font>htmlprint cs<font color=Cyan>)</font>+<a name="(line144)"></a> <font color=Cyan>,</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"</"</font> Pretty<font color=Cyan>.<></font>+<a name="(line145)"></a> Pretty<font color=Cyan>.</font>text n Pretty<font color=Cyan>.<></font>+<a name="(line146)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>">"</font> <font color=Cyan>)</font>+<a name="(line147)"></a> <font color=Red>]</font>+<a name="(line148)"></a>+<a name="(line149)"></a> attrs <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map attribute+<a name="(line150)"></a> attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line151)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>" "</font> Pretty<font color=Cyan>.<></font>+<a name="(line152)"></a> Pretty<font color=Cyan>.</font>text n Pretty<font color=Cyan>.<></font>+<a name="(line153)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>"='"</font> Pretty<font color=Cyan>.<></font>+<a name="(line154)"></a> Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>show v<font color=Cyan>)</font> Pretty<font color=Cyan>.<></font>+<a name="(line155)"></a> Pretty<font color=Cyan>.</font>text <font color=Magenta>"'"</font>+<a name="(line156)"></a>+<a name="(line157)"></a> fmt <font color=Green><u>_</u></font> [] <font color=Red>=</font> []+<a name="(line158)"></a> fmt n s <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>top<font color=Cyan>,</font>bot<font color=Cyan>)</font> <font color=Red>=</font> splitAt n s+<a name="(line159)"></a> <font color=Cyan>(</font>word<font color=Cyan>,</font>left<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace <font color=Cyan>(</font>reverse top<font color=Cyan>)</font>+<a name="(line160)"></a> <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> length top <font color=Cyan><</font> n <font color=Green><u>then</u></font> <font color=Red>[</font>s<font color=Red>]</font>+<a name="(line161)"></a> <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> not <font color=Cyan>(</font>null left<font color=Cyan>)</font> <font color=Green><u>then</u></font>+<a name="(line162)"></a> reverse left<font color=Red><b>:</b></font> fmt n <font color=Cyan>(</font>word<font color=Cyan>++</font>bot<font color=Cyan>)</font>+<a name="(line163)"></a> <font color=Green><u>else</u></font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>big<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace s+<a name="(line164)"></a> <font color=Green><u>in</u></font> reverse big<font color=Red><b>:</b></font> fmt n rest+<a name="(line165)"></a>+<a name="(line166)"></a> deSpace [] <font color=Red>=</font> []+<a name="(line167)"></a> deSpace <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> c<font color=Cyan>==</font><font color=Magenta>'\n'</font> <font color=Red>=</font> deSpace <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>+<a name="(line168)"></a> <font color=Red>|</font> isSpace c <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace <font color=Cyan>(</font>dropWhile isSpace cs<font color=Cyan>)</font>+<a name="(line169)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace cs+<a name="(line170)"></a>+<a name="(line171)"></a> keepUntil p xs <font color=Red>=</font> select p <font color=Cyan>(</font>[]<font color=Cyan>,</font>xs<font color=Cyan>)</font>+<a name="(line172)"></a> <font color=Green><u>where</u></font> select <font color=Green><u>_</u></font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>+<a name="(line173)"></a> select q <font color=Cyan>(</font>ls<font color=Cyan>,</font><font color=Cyan>(</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>|</font> q y <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font>+<a name="(line174)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> select q <font color=Cyan>(</font>y<font color=Red><b>:</b></font>ls<font color=Cyan>,</font>ys<font color=Cyan>)</font>+<a name="(line175)"></a> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/OneOfN.html view
@@ -10,7 +10,7 @@ <a name="(line8)"></a> <a name="(line9)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>)</font> <a name="(line10)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf2 a b<font color=Cyan>)</font>-<a name="(line11)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf2"</font> [] []+<a name="(line11)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf2"</font> [] [] <a name="(line12)"></a> <font color=Blue>-- toHType m = Defined "OneOf2" [a,b] []</font> <a name="(line13)"></a> <font color=Blue>-- where a = toHType $ (\ (OneOf2 a)->a) $ m</font> <a name="(line14)"></a> <font color=Blue>-- b = toHType $ (\ (TwoOf2 b)->b) $ m</font>@@ -32,7 +32,7 @@ <a name="(line30)"></a> <a name="(line31)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>)</font> <a name="(line32)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf3 a b c<font color=Cyan>)</font>-<a name="(line33)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf3"</font> [] []+<a name="(line33)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf3"</font> [] [] <a name="(line34)"></a> <a name="(line35)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>)</font> <a name="(line36)"></a> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>OneOf3 a b c<font color=Cyan>)</font>@@ -51,7 +51,7 @@ <a name="(line49)"></a> <a name="(line50)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>)</font> <a name="(line51)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf4 a b c d<font color=Cyan>)</font>-<a name="(line52)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf4"</font> [] []+<a name="(line52)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf4"</font> [] [] <a name="(line53)"></a> <a name="(line54)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>)</font> <a name="(line55)"></a> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>OneOf4 a b c d<font color=Cyan>)</font>@@ -71,7 +71,7 @@ <a name="(line69)"></a> <a name="(line70)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e<font color=Cyan>)</font> <a name="(line71)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf5 a b c d e<font color=Cyan>)</font>-<a name="(line72)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf5"</font> [] []+<a name="(line72)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf5"</font> [] [] <a name="(line73)"></a> <a name="(line74)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e<font color=Cyan>)</font> <a name="(line75)"></a> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>OneOf5 a b c d e<font color=Cyan>)</font>@@ -94,7 +94,7 @@ <a name="(line92)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line93)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>)</font> <a name="(line94)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf6 a b c d e f<font color=Cyan>)</font>-<a name="(line95)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf6"</font> [] []+<a name="(line95)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf6"</font> [] [] <a name="(line96)"></a> <a name="(line97)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line98)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>)</font>@@ -120,7 +120,7 @@ <a name="(line118)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line119)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>)</font> <a name="(line120)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf7 a b c d e f g<font color=Cyan>)</font>-<a name="(line121)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf7"</font> [] []+<a name="(line121)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf7"</font> [] [] <a name="(line122)"></a> <a name="(line123)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line124)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>)</font>@@ -147,7 +147,7 @@ <a name="(line145)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line146)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>)</font> <a name="(line147)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf8 a b c d e f g h<font color=Cyan>)</font>-<a name="(line148)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf8"</font> [] []+<a name="(line148)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf8"</font> [] [] <a name="(line149)"></a> <a name="(line150)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line151)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>)</font>@@ -175,7 +175,7 @@ <a name="(line173)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line174)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>)</font> <a name="(line175)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf9 a b c d e f g h i<font color=Cyan>)</font>-<a name="(line176)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf9"</font> [] []+<a name="(line176)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf9"</font> [] [] <a name="(line177)"></a> <a name="(line178)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line179)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>)</font>@@ -205,7 +205,7 @@ <a name="(line203)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line204)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j<font color=Cyan>)</font> <a name="(line205)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf10 a b c d e f g h i j<font color=Cyan>)</font>-<a name="(line206)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf10"</font> [] []+<a name="(line206)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf10"</font> [] [] <a name="(line207)"></a> <a name="(line208)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line209)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j<font color=Cyan>)</font>@@ -238,7 +238,7 @@ <a name="(line236)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line237)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>)</font> <a name="(line238)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf11 a b c d e f g h i j k<font color=Cyan>)</font>-<a name="(line239)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf11"</font> [] []+<a name="(line239)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf11"</font> [] [] <a name="(line240)"></a> <a name="(line241)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line242)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -274,7 +274,7 @@ <a name="(line272)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line273)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>)</font> <a name="(line274)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf12 a b c d e f g h i j k l<font color=Cyan>)</font>-<a name="(line275)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf12"</font> [] []+<a name="(line275)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf12"</font> [] [] <a name="(line276)"></a> <a name="(line277)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line278)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -311,7 +311,7 @@ <a name="(line309)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line310)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>)</font> <a name="(line311)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf13 a b c d e f g h i j k l m<font color=Cyan>)</font>-<a name="(line312)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf13"</font> [] []+<a name="(line312)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf13"</font> [] [] <a name="(line313)"></a> <a name="(line314)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line315)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -349,7 +349,7 @@ <a name="(line347)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line348)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>)</font> <a name="(line349)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf14 a b c d e f g h i j k l m n<font color=Cyan>)</font>-<a name="(line350)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf14"</font> [] []+<a name="(line350)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf14"</font> [] [] <a name="(line351)"></a> <a name="(line352)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line353)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -390,7 +390,7 @@ <a name="(line388)"></a> <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line389)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o<font color=Cyan>)</font> <a name="(line390)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf15 a b c d e f g h i j k l m n o<font color=Cyan>)</font>-<a name="(line391)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf15"</font> [] []+<a name="(line391)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf15"</font> [] [] <a name="(line392)"></a> <a name="(line393)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line394)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -433,7 +433,7 @@ <a name="(line431)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line432)"></a> <font color=Cyan>,</font>HTypeable p<font color=Cyan>)</font> <a name="(line433)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf16 a b c d e f g h i j k l m n o p<font color=Cyan>)</font>-<a name="(line434)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf16"</font> [] []+<a name="(line434)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf16"</font> [] [] <a name="(line435)"></a> <a name="(line436)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line437)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -478,7 +478,7 @@ <a name="(line476)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line477)"></a> <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>)</font> <a name="(line478)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf17 a b c d e f g h i j k l m n o p q<font color=Cyan>)</font>-<a name="(line479)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf17"</font> [] []+<a name="(line479)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf17"</font> [] [] <a name="(line480)"></a> <a name="(line481)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line482)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -525,7 +525,7 @@ <a name="(line523)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line524)"></a> <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>)</font> <a name="(line525)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf18 a b c d e f g h i j k l m n o p q r<font color=Cyan>)</font>-<a name="(line526)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf18"</font> [] []+<a name="(line526)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf18"</font> [] [] <a name="(line527)"></a> <a name="(line528)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line529)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -574,7 +574,7 @@ <a name="(line572)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line573)"></a> <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>,</font>HTypeable s<font color=Cyan>)</font> <a name="(line574)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf19 a b c d e f g h i j k l m n o p q r s<font color=Cyan>)</font>-<a name="(line575)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf19"</font> [] []+<a name="(line575)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf19"</font> [] [] <a name="(line576)"></a> <a name="(line577)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line578)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -624,7 +624,7 @@ <a name="(line622)"></a> <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line623)"></a> <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>,</font>HTypeable s<font color=Cyan>,</font>HTypeable t<font color=Cyan>)</font> <a name="(line624)"></a> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>OneOf20 a b c d e f g h i j k l m n o p q r s t<font color=Cyan>)</font>-<a name="(line625)"></a> <font color=Green><u>where</u></font> toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf20"</font> [] []+<a name="(line625)"></a> <font color=Green><u>where</u></font> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf20"</font> [] [] <a name="(line626)"></a> <a name="(line627)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line628)"></a> <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
docs/HaXml/src/Text/XML/HaXml/Posn.html view
@@ -44,7 +44,7 @@ <a name="(line42)"></a>posInNewCxt name pos <font color=Red>=</font> Pn name <font color=Magenta>1</font> <font color=Magenta>1</font> pos <a name="(line43)"></a> <a name="(line44)"></a><font color=Green><u>instance</u></font> Show Posn <font color=Green><u>where</u></font>-<a name="(line45)"></a> showsPrec p <font color=Cyan>(</font>Pn f l c i<font color=Cyan>)</font> <font color=Red>=</font> showString f <font color=Cyan>.</font>+<a name="(line45)"></a> showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Pn f l c i<font color=Cyan>)</font> <font color=Red>=</font> showString f <font color=Cyan>.</font> <a name="(line46)"></a> showString <font color=Magenta>" at line "</font> <font color=Cyan>.</font> shows l <font color=Cyan>.</font> <a name="(line47)"></a> showString <font color=Magenta>" col "</font> <font color=Cyan>.</font> shows c <font color=Cyan>.</font> <a name="(line48)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> i <font color=Green><u>of</u></font>@@ -55,7 +55,7 @@ <a name="(line53)"></a><a name="forcep"></a><font color=Blue>-- | Just used to strictify the internal values of a position, to avoid</font> <a name="(line54)"></a><font color=Blue>-- space leaks.</font> <a name="(line55)"></a>forcep <font color=Red>::</font> Posn <font color=Red>-></font> Int-<a name="(line56)"></a>forcep <font color=Cyan>(</font>Pn f n m i<font color=Cyan>)</font> <font color=Red>=</font> m <font color=Cyan>`seq`</font> n+<a name="(line56)"></a>forcep <font color=Cyan>(</font>Pn <font color=Green><u>_</u></font> n m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> m <font color=Cyan>`seq`</font> n <a name="(line57)"></a> <a name="(line58)"></a><a name="addcol"></a><font color=Blue>-- | Add n character positions to the given position.</font> <a name="(line59)"></a>addcol <font color=Red>::</font> Int <font color=Red>-></font> Posn <font color=Red>-></font> Posn@@ -63,7 +63,7 @@ <a name="(line61)"></a> <a name="(line62)"></a><a name="newline"></a><font color=Blue>-- | Add a newline or tab to the given position.</font> <a name="(line63)"></a>newline<font color=Cyan>,</font> tab <font color=Red>::</font> Posn <font color=Red>-></font> Posn-<a name="(line64)"></a>newline <font color=Cyan>(</font>Pn f r c i<font color=Cyan>)</font> <font color=Red>=</font> Pn f <font color=Cyan>(</font>r<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Magenta>1</font> i+<a name="(line64)"></a>newline <font color=Cyan>(</font>Pn f r <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> Pn f <font color=Cyan>(</font>r<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Magenta>1</font> i <a name="(line65)"></a><a name="tab"></a>tab <font color=Cyan>(</font>Pn f r c i<font color=Cyan>)</font> <font color=Red>=</font> Pn f r <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>c<font color=Cyan>`div`</font><font color=Magenta>8</font><font color=Cyan>)</font><font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font><font color=Cyan>*</font><font color=Magenta>8</font><font color=Cyan>)</font> i <a name="(line66)"></a> <a name="(line67)"></a><a name="white"></a><font color=Blue>-- | Add the given whitespace char to the given position.</font>
docs/HaXml/src/Text/XML/HaXml/Pretty.html view
@@ -30,234 +30,273 @@ <a name="(line28)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <a name="(line29)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types <a name="(line30)"></a>-<a name="(line31)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line32)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x-<a name="(line33)"></a>-<a name="(line34)"></a><a name="maybe"></a>maybe f Nothing <font color=Red>=</font> empty-<a name="(line35)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line36)"></a>-<a name="(line37)"></a><font color=Blue>--peref p = text "%" <> text p <> text ";"</font>+<a name="(line31)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-></font> t1<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>t2 <font color=Red>-></font> t1<font color=Cyan>)</font> <font color=Red>-></font> Either t t2 <font color=Red>-></font> t1+<a name="(line32)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font> <font color=Red>=</font> f x+<a name="(line33)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x+<a name="(line34)"></a>+<a name="(line35)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-></font> Doc<font color=Cyan>)</font> <font color=Red>-></font> Maybe t <font color=Red>-></font> Doc+<a name="(line36)"></a>maybe <font color=Green><u>_</u></font> Nothing <font color=Red>=</font> empty+<a name="(line37)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x <a name="(line38)"></a>-<a name="(line39)"></a><font color=Blue>----</font>+<a name="(line39)"></a><font color=Blue>--peref p = text "%" <> text p <> text ";"</font> <a name="(line40)"></a>-<a name="(line41)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-></font> Doc-<a name="(line42)"></a><a name="prolog"></a>prolog <font color=Red>::</font> Prolog <font color=Red>-></font> Doc-<a name="(line43)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> XMLDecl <font color=Red>-></font> Doc-<a name="(line44)"></a><a name="misc"></a>misc <font color=Red>::</font> Misc <font color=Red>-></font> Doc-<a name="(line45)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> Bool <font color=Red>-></font> Doc-<a name="(line46)"></a>-<a name="(line47)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-></font> Doc-<a name="(line48)"></a><a name="markupdecl"></a>markupdecl <font color=Red>::</font> MarkupDecl <font color=Red>-></font> Doc-<a name="(line49)"></a><a name="extsubset"></a>extsubset <font color=Red>::</font> ExtSubset <font color=Red>-></font> Doc-<a name="(line50)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-></font> Doc-<a name="(line51)"></a><a name="cp"></a>cp <font color=Red>::</font> CP <font color=Red>-></font> Doc-<a name="(line52)"></a>-<a name="(line53)"></a><a name="element"></a>element <font color=Red>::</font> Element i <font color=Red>-></font> Doc-<a name="(line54)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-></font> Doc <font color=Cyan>--etc</font>-<a name="(line55)"></a><a name="content"></a>content <font color=Red>::</font> Content i <font color=Red>-></font> Doc-<a name="(line56)"></a>-<a name="(line57)"></a><font color=Blue>----</font>+<a name="(line41)"></a><font color=Blue>----</font>+<a name="(line42)"></a>+<a name="(line43)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-></font> Doc+<a name="(line44)"></a><a name="prolog"></a>prolog <font color=Red>::</font> Prolog <font color=Red>-></font> Doc+<a name="(line45)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> XMLDecl <font color=Red>-></font> Doc+<a name="(line46)"></a><a name="misc"></a>misc <font color=Red>::</font> Misc <font color=Red>-></font> Doc+<a name="(line47)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> Bool <font color=Red>-></font> Doc+<a name="(line48)"></a>+<a name="(line49)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-></font> Doc+<a name="(line50)"></a><a name="markupdecl"></a>markupdecl <font color=Red>::</font> MarkupDecl <font color=Red>-></font> Doc+<a name="(line51)"></a><a name="extsubset"></a>extsubset <font color=Red>::</font> ExtSubset <font color=Red>-></font> Doc+<a name="(line52)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-></font> Doc+<a name="(line53)"></a><a name="cp"></a>cp <font color=Red>::</font> CP <font color=Red>-></font> Doc+<a name="(line54)"></a>+<a name="(line55)"></a><a name="element"></a>element <font color=Red>::</font> Element i <font color=Red>-></font> Doc+<a name="(line56)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-></font> Doc <font color=Cyan>--etc</font>+<a name="(line57)"></a><a name="content"></a>content <font color=Red>::</font> Content i <font color=Red>-></font> Doc <a name="(line58)"></a>-<a name="(line59)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>-<a name="(line60)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>-<a name="(line61)"></a> vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line62)"></a> maybe doctypedecl dtd <font color=Cyan>$$</font>-<a name="(line63)"></a> vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>-<a name="(line64)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml version='"</font> <font color=Cyan><></font> text v <font color=Cyan><></font> text <font color=Magenta>"'"</font> <font color=Cyan><+></font>-<a name="(line65)"></a> maybe encodingdecl e <font color=Cyan><+></font>-<a name="(line66)"></a> maybe sddecl sd <font color=Cyan><+></font>-<a name="(line67)"></a> text <font color=Magenta>"?>"</font>-<a name="(line68)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!--"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"-->"</font>-<a name="(line69)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> text s <font color=Cyan><></font> text <font color=Magenta>"?>"</font>-<a name="(line70)"></a>sddecl sd <font color=Red>|</font> sd <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>-<a name="(line71)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>-<a name="(line72)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> -<a name="(line73)"></a> hd <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line74)"></a> <font color=Green><u>else</u></font> hd <font color=Cyan><+></font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>-<a name="(line75)"></a> vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]>"</font>-<a name="(line76)"></a> <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"<!DOCTYPE"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line77)"></a> maybe externalid eid-<a name="(line78)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font> <font color=Red>=</font> elementdecl e-<a name="(line79)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font> <font color=Red>=</font> attlistdecl a-<a name="(line80)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font> <font color=Red>=</font> entitydecl e-<a name="(line81)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font> <font color=Red>=</font> notationdecl n-<a name="(line82)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font> <font color=Red>=</font> misc m-<a name="(line83)"></a><font color=Blue>--markupdecl (MarkupPE p m) = peref p</font>-<a name="(line84)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>-<a name="(line85)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>-<a name="(line86)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font> <font color=Red>=</font> markupdecl m-<a name="(line87)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c-<a name="(line88)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e) = peref p</font>-<a name="(line89)"></a>-<a name="(line90)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font>-<a name="(line91)"></a> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"/>"</font>-<a name="(line92)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>-<a name="(line93)"></a><font color=Blue>-- | any isText cs = text "<" <> text n <+> fsep (map attribute as) <></font>-<a name="(line94)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <></font>-<a name="(line95)"></a><font color=Blue>-- text "</" <> text n <> text ">"</font>-<a name="(line96)"></a> <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line97)"></a> text <font color=Magenta>">"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line98)"></a> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line99)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty-<a name="(line100)"></a> <font color=Green><u>in</u></font> d <font color=Cyan><></font> c-<a name="(line101)"></a>-<a name="(line102)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line103)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line104)"></a>isText <font color=Green><u>_</u></font> <font color=Red>=</font> False-<a name="(line105)"></a>-<a name="(line106)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c-<a name="(line107)"></a> <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan><></font>-<a name="(line108)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>-<a name="(line109)"></a> <font color=Cyan>,</font> text <font color=Magenta>"/>"</font><font color=Cyan>)</font>-<a name="(line110)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c-<a name="(line111)"></a><font color=Blue>-- | any isText cs = ( c <> element e, empty)</font>-<a name="(line112)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>">"</font><font color=Cyan>)</font>-<a name="(line113)"></a> <font color=Green><u>in</u></font>-<a name="(line114)"></a> <font color=Cyan>(</font> c <font color=Cyan><></font>-<a name="(line115)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line116)"></a> nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan><></font> <font color=Blue>--- $$</font>-<a name="(line117)"></a> d0 <font color=Cyan><></font> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n-<a name="(line118)"></a> <font color=Cyan>,</font> text <font color=Magenta>">"</font><font color=Cyan>)</font>-<a name="(line119)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> carryelem e c-<a name="(line120)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line121)"></a>carrycontent <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line122)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line123)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line124)"></a>-<a name="(line125)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-></font>c<font color=Red>-></font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> c <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line126)"></a>carryscan f [] c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line127)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c-<a name="(line128)"></a> <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0-<a name="(line129)"></a> <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>-<a name="(line130)"></a>-<a name="(line131)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>-<a name="(line132)"></a><font color=Blue>-- | isText (head cs) =</font>-<a name="(line133)"></a><font color=Blue>-- ( start <></font>-<a name="(line134)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <> text "</" <> text n</font>-<a name="(line135)"></a><font color=Blue>-- , text ">")</font>-<a name="(line136)"></a><font color=Blue>-- | otherwise =</font>-<a name="(line137)"></a><font color=Blue>-- let (d,c0) = foldl carrycontent (start, text ">") cs in</font>-<a name="(line138)"></a><font color=Blue>-- ( d <> c0 <> text "</" <> text n</font>-<a name="(line139)"></a><font color=Blue>-- , text ">")</font>-<a name="(line140)"></a><font color=Blue>-- where start = c <> text "<" <> text n <+> fsep (map attribute as)</font>-<a name="(line141)"></a><font color=Blue>--</font>-<a name="(line142)"></a><font color=Blue>--carrycontent (d,c) (CElem e) = let (d',c') = carryelem e c in</font>-<a name="(line143)"></a><font color=Blue>-- (d $$ nest 2 d', c')</font>-<a name="(line144)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d <> c <> chardata s, empty)</font>-<a name="(line145)"></a><font color=Blue>--carrycontent (d,c) (CRef r) = (d <> c <> reference r,empty)</font>-<a name="(line146)"></a><font color=Blue>--carrycontent (d,c) (CMisc m) = (d $$ c <> misc m, empty)</font>-<a name="(line147)"></a>-<a name="(line148)"></a>-<a name="(line149)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> text <font color=Magenta>"="</font> <font color=Cyan><></font> attvalue v-<a name="(line150)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> element e-<a name="(line151)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s-<a name="(line152)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cdsect s-<a name="(line153)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> reference r-<a name="(line154)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> misc m-<a name="(line155)"></a>-<a name="(line156)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ELEMENT"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line157)"></a> contentspec cs <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line158)"></a><a name="contentspec"></a>contentspec EMPTY <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>-<a name="(line159)"></a>contentspec ANY <font color=Red>=</font> text <font color=Magenta>"ANY"</font>-<a name="(line160)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font> <font color=Red>=</font> mixed m-<a name="(line161)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font> <font color=Red>=</font> cp c-<a name="(line162)"></a><font color=Blue>--contentspec (ContentPE p cs) = peref p</font>-<a name="(line163)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>text n<font color=Cyan>)</font> <font color=Cyan><></font> modifier m-<a name="(line164)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line165)"></a> modifier m-<a name="(line166)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line167)"></a> modifier m-<a name="(line168)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c) = peref p</font>-<a name="(line169)"></a>modifier None <font color=Red>=</font> empty-<a name="(line170)"></a>modifier Query <font color=Red>=</font> text <font color=Magenta>"?"</font>-<a name="(line171)"></a>modifier Star <font color=Red>=</font> text <font color=Magenta>"*"</font>-<a name="(line172)"></a>modifier Plus <font color=Red>=</font> text <font color=Magenta>"+"</font>-<a name="(line173)"></a><a name="mixed"></a>mixed PCDATA <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>-<a name="(line174)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan><+></font>-<a name="(line175)"></a> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line176)"></a> text <font color=Magenta>")*"</font>-<a name="(line177)"></a>-<a name="(line178)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ATTLIST"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line179)"></a> fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line180)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><+></font> atttype t <font color=Cyan><+></font> defaultdecl d-<a name="(line181)"></a><a name="atttype"></a>atttype StringType <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>-<a name="(line182)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> <font color=Red>=</font> tokenizedtype t-<a name="(line183)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font> <font color=Red>=</font> enumeratedtype t-<a name="(line184)"></a><a name="tokenizedtype"></a>tokenizedtype ID <font color=Red>=</font> text <font color=Magenta>"ID"</font>-<a name="(line185)"></a>tokenizedtype IDREF <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>-<a name="(line186)"></a>tokenizedtype IDREFS <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>-<a name="(line187)"></a>tokenizedtype ENTITY <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>-<a name="(line188)"></a>tokenizedtype ENTITIES <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>-<a name="(line189)"></a>tokenizedtype NMTOKEN <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>-<a name="(line190)"></a>tokenizedtype NMTOKENS <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>-<a name="(line191)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n-<a name="(line192)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e-<a name="(line193)"></a><a name="notationtype"></a>notationtype ns <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan><+></font>-<a name="(line194)"></a> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line195)"></a><a name="enumeration"></a>enumeration ns <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line196)"></a><a name="defaultdecl"></a>defaultdecl REQUIRED <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>-<a name="(line197)"></a>defaultdecl IMPLIED <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>-<a name="(line198)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan><+></font> attvalue a-<a name="(line199)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"<![INCLUDE ["</font> <font color=Cyan><+></font>-<a name="(line200)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"]]>"</font>-<a name="(line201)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<![IGNORE ["</font> <font color=Cyan><+></font>-<a name="(line202)"></a> fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"]]>"</font>-<a name="(line203)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font> <font color=Red>=</font> empty-<a name="(line204)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>-<a name="(line205)"></a> <font color=Red>=</font> ignore i <font color=Cyan><+></font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>-<a name="(line206)"></a> <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<![["</font> <font color=Cyan><+></font>-<a name="(line207)"></a> ignoresectcontents ics <font color=Cyan><+></font>-<a name="(line208)"></a> text <font color=Magenta>"]]>"</font> <font color=Cyan><+></font> ignore i-<a name="(line209)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font> <font color=Red>=</font> entityref er-<a name="(line210)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font> <font color=Red>=</font> charref cr-<a name="(line211)"></a><a name="entityref"></a>entityref n <font color=Red>=</font> text <font color=Magenta>"&"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>";"</font>-<a name="(line212)"></a><a name="charref"></a>charref c <font color=Red>=</font> text <font color=Magenta>"&#"</font> <font color=Cyan><></font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>";"</font>-<a name="(line213)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font> <font color=Red>=</font> gedecl d-<a name="(line214)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font> <font color=Red>=</font> pedecl d-<a name="(line215)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font> entitydef ed <font color=Cyan><></font>-<a name="(line216)"></a> text <font color=Magenta>">"</font>-<a name="(line217)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY %"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font> pedef pd <font color=Cyan><></font>-<a name="(line218)"></a> text <font color=Magenta>">"</font>-<a name="(line219)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ev-<a name="(line220)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan><+></font> maybe ndatadecl nd-<a name="(line221)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ev-<a name="(line222)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font> <font color=Red>=</font> externalid eid-<a name="(line223)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan><+></font> systemliteral sl-<a name="(line224)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan><+></font> pubidliteral i <font color=Cyan><+></font>-<a name="(line225)"></a> systemliteral sl-<a name="(line226)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan><+></font> text n-<a name="(line227)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml"</font> <font color=Cyan><+></font> maybe text vi <font color=Cyan><+></font>-<a name="(line228)"></a> encodingdecl ed <font color=Cyan><+></font> text <font color=Magenta>"?>"</font>-<a name="(line229)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan><+></font> content c-<a name="(line230)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan><+></font>-<a name="(line231)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>-<a name="(line232)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!NOTATION"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line233)"></a> either externalid publicid e <font color=Cyan><></font>-<a name="(line234)"></a> text <font color=Magenta>">"</font>-<a name="(line235)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan><+></font> pubidliteral p-<a name="(line236)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line237)"></a><a name="nmtoken"></a>nmtoken s <font color=Red>=</font> text s-<a name="(line238)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font>-<a name="(line239)"></a> hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line240)"></a> text <font color=Magenta>"\""</font>-<a name="(line241)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>-<a name="(line242)"></a> <font color=Red>|</font> containsDoubleQuote evs <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line243)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line244)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> text s-<a name="(line245)"></a><font color=Blue>--ev (EVPERef p e) = peref p</font>-<a name="(line246)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font> <font color=Red>=</font> reference r-<a name="(line247)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>-<a name="(line248)"></a> <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line249)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line250)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>-<a name="(line251)"></a> <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line252)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line253)"></a><a name="chardata"></a>chardata s <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s-<a name="(line254)"></a><a name="cdsect"></a>cdsect c <font color=Red>=</font> text <font color=Magenta>"<![CDATA["</font> <font color=Cyan><></font> chardata c <font color=Cyan><></font> text <font color=Magenta>"]]>"</font>-<a name="(line255)"></a>-<a name="(line256)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>-<a name="(line257)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs-<a name="(line258)"></a> <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s-<a name="(line259)"></a> csq <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line59)"></a><font color=Blue>----</font>+<a name="(line60)"></a>+<a name="(line61)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>+<a name="(line62)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>+<a name="(line63)"></a> vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line64)"></a> maybe doctypedecl dtd <font color=Cyan>$$</font>+<a name="(line65)"></a> vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>+<a name="(line66)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml version='"</font> <font color=Cyan><></font> text v <font color=Cyan><></font> text <font color=Magenta>"'"</font> <font color=Cyan><+></font>+<a name="(line67)"></a> maybe encodingdecl e <font color=Cyan><+></font>+<a name="(line68)"></a> maybe sddecl sd <font color=Cyan><+></font>+<a name="(line69)"></a> text <font color=Magenta>"?>"</font>+<a name="(line70)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!--"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"-->"</font>+<a name="(line71)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> text s <font color=Cyan><></font> text <font color=Magenta>"?>"</font>+<a name="(line72)"></a>sddecl sd <font color=Red>|</font> sd <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>+<a name="(line73)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>+<a name="(line74)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font>+<a name="(line75)"></a> hd <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line76)"></a> <font color=Green><u>else</u></font> hd <font color=Cyan><+></font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>+<a name="(line77)"></a> vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]>"</font>+<a name="(line78)"></a> <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"<!DOCTYPE"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line79)"></a> maybe externalid eid+<a name="(line80)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font> <font color=Red>=</font> elementdecl e+<a name="(line81)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font> <font color=Red>=</font> attlistdecl a+<a name="(line82)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font> <font color=Red>=</font> entitydecl e+<a name="(line83)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font> <font color=Red>=</font> notationdecl n+<a name="(line84)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font> <font color=Red>=</font> misc m+<a name="(line85)"></a><font color=Blue>-- markupdecl (MarkupPE p m) = peref p</font>+<a name="(line86)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>+<a name="(line87)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>+<a name="(line88)"></a><a name="extmarkupdecl"></a>extmarkupdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font> <font color=Red>=</font> markupdecl m+<a name="(line89)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c+<a name="(line90)"></a><font color=Blue>-- extsubsetdecl (ExtPEReference p e) = peref p</font>+<a name="(line91)"></a>+<a name="(line92)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font>+<a name="(line93)"></a> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"/>"</font>+<a name="(line94)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>+<a name="(line95)"></a><font color=Blue>-- | any isText cs = text "<" <> text n <+> fsep (map attribute as) <></font>+<a name="(line96)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <></font>+<a name="(line97)"></a><font color=Blue>-- text "</" <> text n <> text ">"</font>+<a name="(line98)"></a> <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line99)"></a> text <font color=Magenta>">"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line100)"></a> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line101)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty+<a name="(line102)"></a> <font color=Green><u>in</u></font> d <font color=Cyan><></font> c+<a name="(line103)"></a>+<a name="(line104)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-></font> Bool+<a name="(line105)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line106)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line107)"></a>isText <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line108)"></a>+<a name="(line109)"></a><a name="carryelem"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-></font> Doc <font color=Red>-></font> <font color=Cyan>(</font>Doc<font color=Cyan>,</font> Doc<font color=Cyan>)</font>+<a name="(line110)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font> Content t <font color=Red>-></font> Doc <font color=Red>-></font> <font color=Cyan>(</font>Doc<font color=Cyan>,</font> Doc<font color=Cyan>)</font>+<a name="(line111)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c+<a name="(line112)"></a> <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan><></font>+<a name="(line113)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>+<a name="(line114)"></a> <font color=Cyan>,</font> text <font color=Magenta>"/>"</font><font color=Cyan>)</font>+<a name="(line115)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c+<a name="(line116)"></a><font color=Blue>-- | any isText cs = ( c <> element e, empty)</font>+<a name="(line117)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>">"</font><font color=Cyan>)</font>+<a name="(line118)"></a> <font color=Green><u>in</u></font>+<a name="(line119)"></a> <font color=Cyan>(</font> c <font color=Cyan><></font>+<a name="(line120)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line121)"></a> nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan><></font> <font color=Blue>--- $$</font>+<a name="(line122)"></a> d0 <font color=Cyan><></font> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n+<a name="(line123)"></a> <font color=Cyan>,</font> text <font color=Magenta>">"</font><font color=Cyan>)</font>+<a name="(line124)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> carryelem e c+<a name="(line125)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line126)"></a>carrycontent <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line127)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line128)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line129)"></a>+<a name="(line130)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-></font>c<font color=Red>-></font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> c <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line131)"></a>carryscan <font color=Green><u>_</u></font> [] c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line132)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c+<a name="(line133)"></a> <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0+<a name="(line134)"></a> <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>+<a name="(line135)"></a>+<a name="(line136)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>+<a name="(line137)"></a><font color=Blue>-- | isText (head cs) =</font>+<a name="(line138)"></a><font color=Blue>-- ( start <></font>+<a name="(line139)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <> text "</" <> text n</font>+<a name="(line140)"></a><font color=Blue>-- , text ">")</font>+<a name="(line141)"></a><font color=Blue>-- | otherwise =</font>+<a name="(line142)"></a><font color=Blue>-- let (d,c0) = foldl carrycontent (start, text ">") cs in</font>+<a name="(line143)"></a><font color=Blue>-- ( d <> c0 <> text "</" <> text n</font>+<a name="(line144)"></a><font color=Blue>-- , text ">")</font>+<a name="(line145)"></a><font color=Blue>-- where start = c <> text "<" <> text n <+> fsep (map attribute as)</font>+<a name="(line146)"></a><font color=Blue>--</font>+<a name="(line147)"></a><font color=Blue>--carrycontent (d,c) (CElem e) = let (d',c') = carryelem e c in</font>+<a name="(line148)"></a><font color=Blue>-- (d $$ nest 2 d', c')</font>+<a name="(line149)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d <> c <> chardata s, empty)</font>+<a name="(line150)"></a><font color=Blue>--carrycontent (d,c) (CRef r) = (d <> c <> reference r,empty)</font>+<a name="(line151)"></a><font color=Blue>--carrycontent (d,c) (CMisc m) = (d $$ c <> misc m, empty)</font>+<a name="(line152)"></a>+<a name="(line153)"></a>+<a name="(line154)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> text <font color=Magenta>"="</font> <font color=Cyan><></font> attvalue v+<a name="(line155)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> element e+<a name="(line156)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s+<a name="(line157)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cdsect s+<a name="(line158)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> reference r+<a name="(line159)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> misc m+<a name="(line160)"></a>+<a name="(line161)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-></font> Doc+<a name="(line162)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ELEMENT"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line163)"></a> contentspec cs <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line164)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-></font> Doc+<a name="(line165)"></a>contentspec EMPTY <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>+<a name="(line166)"></a>contentspec ANY <font color=Red>=</font> text <font color=Magenta>"ANY"</font>+<a name="(line167)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font> <font color=Red>=</font> mixed m+<a name="(line168)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font> <font color=Red>=</font> cp c+<a name="(line169)"></a><font color=Blue>--contentspec (ContentPE p cs) = peref p</font>+<a name="(line170)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>text n<font color=Cyan>)</font> <font color=Cyan><></font> modifier m+<a name="(line171)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line172)"></a> modifier m+<a name="(line173)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line174)"></a> modifier m+<a name="(line175)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c) = peref p</font>+<a name="(line176)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-></font> Doc+<a name="(line177)"></a>modifier None <font color=Red>=</font> empty+<a name="(line178)"></a>modifier Query <font color=Red>=</font> text <font color=Magenta>"?"</font>+<a name="(line179)"></a>modifier Star <font color=Red>=</font> text <font color=Magenta>"*"</font>+<a name="(line180)"></a>modifier Plus <font color=Red>=</font> text <font color=Magenta>"+"</font>+<a name="(line181)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-></font> Doc+<a name="(line182)"></a>mixed PCDATA <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>+<a name="(line183)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan><+></font>+<a name="(line184)"></a> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line185)"></a> text <font color=Magenta>")*"</font>+<a name="(line186)"></a>+<a name="(line187)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-></font> Doc+<a name="(line188)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ATTLIST"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line189)"></a> fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line190)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-></font> Doc+<a name="(line191)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><+></font> atttype t <font color=Cyan><+></font> defaultdecl d+<a name="(line192)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-></font> Doc+<a name="(line193)"></a>atttype StringType <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>+<a name="(line194)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> <font color=Red>=</font> tokenizedtype t+<a name="(line195)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font> <font color=Red>=</font> enumeratedtype t+<a name="(line196)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-></font> Doc+<a name="(line197)"></a>tokenizedtype ID <font color=Red>=</font> text <font color=Magenta>"ID"</font>+<a name="(line198)"></a>tokenizedtype IDREF <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>+<a name="(line199)"></a>tokenizedtype IDREFS <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>+<a name="(line200)"></a>tokenizedtype ENTITY <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>+<a name="(line201)"></a>tokenizedtype ENTITIES <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>+<a name="(line202)"></a>tokenizedtype NMTOKEN <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>+<a name="(line203)"></a>tokenizedtype NMTOKENS <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>+<a name="(line204)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-></font> Doc+<a name="(line205)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n+<a name="(line206)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e+<a name="(line207)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> Doc+<a name="(line208)"></a>notationtype ns <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan><+></font>+<a name="(line209)"></a> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line210)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> Doc+<a name="(line211)"></a>enumeration ns <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line212)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-></font> Doc+<a name="(line213)"></a>defaultdecl REQUIRED <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>+<a name="(line214)"></a>defaultdecl IMPLIED <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>+<a name="(line215)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan><+></font> attvalue a+<a name="(line216)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"<![INCLUDE ["</font> <font color=Cyan><+></font>+<a name="(line217)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"]]>"</font>+<a name="(line218)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<![IGNORE ["</font> <font color=Cyan><+></font>+<a name="(line219)"></a> fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"]]>"</font>+<a name="(line220)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font> <font color=Red>=</font> empty+<a name="(line221)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>+<a name="(line222)"></a> <font color=Red>=</font> ignore i <font color=Cyan><+></font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>+<a name="(line223)"></a> <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<![["</font> <font color=Cyan><+></font>+<a name="(line224)"></a> ignoresectcontents ics <font color=Cyan><+></font>+<a name="(line225)"></a> text <font color=Magenta>"]]>"</font> <font color=Cyan><+></font> ignore i+<a name="(line226)"></a><a name="reference"></a>reference <font color=Red>::</font> Reference <font color=Red>-></font> Doc+<a name="(line227)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font> <font color=Red>=</font> entityref er+<a name="(line228)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font> <font color=Red>=</font> charref cr+<a name="(line229)"></a><a name="entityref"></a>entityref <font color=Red>::</font> String <font color=Red>-></font> Doc+<a name="(line230)"></a>entityref n <font color=Red>=</font> text <font color=Magenta>"&"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>";"</font>+<a name="(line231)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=></font> a <font color=Red>-></font> Doc+<a name="(line232)"></a>charref c <font color=Red>=</font> text <font color=Magenta>"&#"</font> <font color=Cyan><></font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>";"</font>+<a name="(line233)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-></font> Doc+<a name="(line234)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font> <font color=Red>=</font> gedecl d+<a name="(line235)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font> <font color=Red>=</font> pedecl d+<a name="(line236)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-></font> Doc+<a name="(line237)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font> entitydef ed <font color=Cyan><></font>+<a name="(line238)"></a> text <font color=Magenta>">"</font>+<a name="(line239)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-></font> Doc+<a name="(line240)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY %"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font> pedef pd <font color=Cyan><></font>+<a name="(line241)"></a> text <font color=Magenta>">"</font>+<a name="(line242)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-></font> Doc+<a name="(line243)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ew+<a name="(line244)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan><+></font> maybe ndatadecl nd+<a name="(line245)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-></font> Doc+<a name="(line246)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ew+<a name="(line247)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font> <font color=Red>=</font> externalid eid+<a name="(line248)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-></font> Doc+<a name="(line249)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan><+></font> systemliteral sl+<a name="(line250)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan><+></font> pubidliteral i <font color=Cyan><+></font>+<a name="(line251)"></a> systemliteral sl+<a name="(line252)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-></font> Doc+<a name="(line253)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan><+></font> text n+<a name="(line254)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml"</font> <font color=Cyan><+></font> maybe text vi <font color=Cyan><+></font>+<a name="(line255)"></a> encodingdecl ed <font color=Cyan><+></font> text <font color=Magenta>"?>"</font>+<a name="(line256)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan><+></font> content c+<a name="(line257)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan><+></font>+<a name="(line258)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>+<a name="(line259)"></a><a name="notationdecl"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-></font> Doc+<a name="(line260)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!NOTATION"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line261)"></a> either externalid publicid e <font color=Cyan><></font>+<a name="(line262)"></a> text <font color=Magenta>">"</font>+<a name="(line263)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-></font> Doc+<a name="(line264)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan><+></font> pubidliteral p+<a name="(line265)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-></font> Doc+<a name="(line266)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line267)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> String <font color=Red>-></font> Doc+<a name="(line268)"></a>nmtoken s <font color=Red>=</font> text s+<a name="(line269)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-></font> Doc+<a name="(line270)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font>+<a name="(line271)"></a> hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line272)"></a> text <font color=Magenta>"\""</font>+<a name="(line273)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-></font> Doc+<a name="(line274)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>+<a name="(line275)"></a> <font color=Red>|</font> containsDoubleQuote evs <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line276)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line277)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-></font> Doc+<a name="(line278)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> text s+<a name="(line279)"></a><font color=Blue>--ev (EVPERef p e) = peref p</font>+<a name="(line280)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font> <font color=Red>=</font> reference r+<a name="(line281)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-></font> Doc+<a name="(line282)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>+<a name="(line283)"></a> <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line284)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line285)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-></font> Doc+<a name="(line286)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>+<a name="(line287)"></a> <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line288)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line289)"></a><a name="chardata"></a>chardata <font color=Red>::</font> String <font color=Red>-></font> Doc+<a name="(line290)"></a>chardata s <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s+<a name="(line291)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> String <font color=Red>-></font> Doc+<a name="(line292)"></a>cdsect c <font color=Red>=</font> text <font color=Magenta>"<![CDATA["</font> <font color=Cyan><></font> chardata c <font color=Cyan><></font> text <font color=Magenta>"]]>"</font>+<a name="(line293)"></a>+<a name="(line294)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>+<a name="(line295)"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-></font> Bool+<a name="(line296)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs+<a name="(line297)"></a> <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s+<a name="(line298)"></a> csq <font color=Green><u>_</u></font> <font color=Red>=</font> False </pre> </html>
docs/HaXml/src/Text/XML/HaXml/SAX.html view
@@ -37,8 +37,8 @@ <a name="(line35)"></a> <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>SaxElement<font color=Red>]</font><font color=Cyan>,</font>Maybe String<font color=Cyan>)</font> <a name="(line36)"></a> <font color=Blue>-- ^ A tuple of the parsed elements and @Nothing@, if no</font> <a name="(line37)"></a> <font color=Blue>-- error occured, or @Just@ @String@ if an error occured.</font>-<a name="(line38)"></a>saxParse file content <font color=Red>=</font> parseStream sax emptySTs-<a name="(line39)"></a> <font color=Cyan>(</font>xmlLex file content<font color=Cyan>)</font>+<a name="(line38)"></a>saxParse file cntnt <font color=Red>=</font> parseStream sax emptySTs+<a name="(line39)"></a> <font color=Cyan>(</font>xmlLex file cntnt<font color=Cyan>)</font> <a name="(line40)"></a> <a name="(line41)"></a><a name="parseStream"></a>parseStream <font color=Red>::</font> Parser s t a <font color=Red>-></font> s <font color=Red>-></font> <font color=Red>[</font>t<font color=Red>]</font> <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>a<font color=Red>]</font><font color=Cyan>,</font> Maybe String<font color=Cyan>)</font> <a name="(line42)"></a>parseStream <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>Nothing<font color=Cyan>)</font>@@ -80,13 +80,13 @@ <a name="(line78)"></a>saxcomment <font color=Red>=</font> comment <font color=Cyan>>>=</font> return <font color=Cyan>.</font> SaxComment <a name="(line79)"></a> <a name="(line80)"></a><a name="saxchardata"></a>saxchardata <font color=Red>::</font> XParser SaxElement-<a name="(line81)"></a>saxchardata <font color=Red>=</font> +<a name="(line81)"></a>saxchardata <font color=Red>=</font> <a name="(line82)"></a> <font color=Cyan>(</font>cdsect <font color=Cyan>>>=</font> return <font color=Cyan>.</font> SaxCharData<font color=Cyan>)</font> <a name="(line83)"></a> <font color=Cyan>`onFail`</font> <a name="(line84)"></a> <font color=Cyan>(</font>chardata <font color=Cyan>>>=</font> return <font color=Cyan>.</font> SaxCharData<font color=Cyan>)</font> <a name="(line85)"></a> <a name="(line86)"></a><a name="saxreference"></a>saxreference <font color=Red>::</font> XParser SaxElement-<a name="(line87)"></a>saxreference <font color=Red>=</font> reference <font color=Cyan>>>=</font> return <font color=Cyan>.</font> SaxReference +<a name="(line87)"></a>saxreference <font color=Red>=</font> reference <font color=Cyan>>>=</font> return <font color=Cyan>.</font> SaxReference <a name="(line88)"></a> <a name="(line89)"></a><a name="saxdoctypedecl"></a>saxdoctypedecl <font color=Red>::</font> XParser SaxElement <a name="(line90)"></a>saxdoctypedecl <font color=Red>=</font> doctypedecl <font color=Cyan>>>=</font> return <font color=Cyan>.</font> SaxDocTypeDecl
docs/HaXml/src/Text/XML/HaXml/ShowXmlLazy.html view
@@ -1,283 +1,331 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html>-<pre><a name="(line1)"></a>-<a name="(line2)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ShowXmlLazy <font color=Cyan>(</font>showXmlLazy<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line3)"></a>-<a name="(line4)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types-<a name="(line5)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping-<a name="(line6)"></a>-<a name="(line7)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent <font color=Green><u>as</u></font> X-<a name="(line8)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>)</font>-<a name="(line9)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>-<a name="(line10)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List-<a name="(line11)"></a>-<a name="(line12)"></a><a name="showXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD). </font>-<a name="(line13)"></a>showXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> String-<a name="(line14)"></a>showXmlLazy dtd x <font color=Red>=</font>-<a name="(line15)"></a> <font color=Green><u>case</u></font> X<font color=Cyan>.</font>toContents x <font color=Green><u>of</u></font>-<a name="(line16)"></a> <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-></font> document <font color=Cyan>$</font> toXmlLazy dtd x-<a name="(line17)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Magenta>""</font>+<pre><a name="(line1)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ShowXmlLazy <font color=Cyan>(</font>showXmlLazy<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line2)"></a>+<a name="(line3)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types+<a name="(line4)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping <font color=Blue>-- (toHType, toDTD, Tuple(), Defined, showHType)</font>+<a name="(line5)"></a>+<a name="(line6)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent <font color=Green><u>as</u></font> X+<a name="(line7)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>)</font>+<a name="(line8)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>+<a name="(line9)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List+<a name="(line10)"></a>+<a name="(line11)"></a><a name="showXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>+<a name="(line12)"></a>showXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> String+<a name="(line13)"></a>showXmlLazy dtd x <font color=Red>=</font>+<a name="(line14)"></a> <font color=Green><u>case</u></font> X<font color=Cyan>.</font>toContents x <font color=Green><u>of</u></font>+<a name="(line15)"></a> <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-></font> document <font color=Cyan>$</font> toXmlLazy dtd x+<a name="(line16)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Magenta>""</font>+<a name="(line17)"></a> <a name="(line18)"></a>-<a name="(line19)"></a>-<a name="(line20)"></a><a name="toXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD). </font>-<a name="(line21)"></a>toXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> Document ()-<a name="(line22)"></a>toXmlLazy dtd value <font color=Red>=</font>-<a name="(line23)"></a> <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>-<a name="(line24)"></a> Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line25)"></a> [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>-<a name="(line26)"></a> emptyST-<a name="(line27)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> X<font color=Cyan>.</font>toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>-<a name="(line28)"></a> <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs-<a name="(line29)"></a> <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs-<a name="(line30)"></a> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> e <font color=Cyan>)</font>-<a name="(line31)"></a> []+<a name="(line19)"></a><a name="toXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>+<a name="(line20)"></a>toXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> Document ()+<a name="(line21)"></a>toXmlLazy dtd value <font color=Red>=</font>+<a name="(line22)"></a> <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>+<a name="(line23)"></a> Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line24)"></a> [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>+<a name="(line25)"></a> emptyST+<a name="(line26)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> X<font color=Cyan>.</font>toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>+<a name="(line27)"></a> <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs+<a name="(line28)"></a> <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs+<a name="(line29)"></a> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> e <font color=Cyan>)</font>+<a name="(line30)"></a> []+<a name="(line31)"></a> <a name="(line32)"></a> <a name="(line33)"></a> <a name="(line34)"></a>-<a name="(line35)"></a>-<a name="(line36)"></a><a name="Doc"></a><font color=Green><u>type</u></font> Doc <font color=Red>=</font> String-<a name="(line37)"></a><a name="empty"></a>empty <font color=Red>=</font> <font color=Magenta>""</font>-<a name="(line38)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>"\n"</font> <font color=Cyan>++</font> b-<a name="(line39)"></a><a name="vcat"></a>vcat a <font color=Red>=</font> foldr <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> [] a-<a name="(line40)"></a><a name="hcat"></a>hcat <font color=Red>=</font> concat-<a name="(line41)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan><></font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>-<a name="(line42)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan><+></font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>" "</font> <font color=Cyan>++</font> b-<a name="(line43)"></a><a name="fsep"></a>fsep <font color=Red>=</font> vcat-<a name="(line44)"></a><a name="text"></a>text string <font color=Red>=</font> string-<a name="(line45)"></a><a name="parens"></a>parens string <font color=Red>=</font> <font color=Magenta>"("</font><font color=Cyan>++</font>string<font color=Cyan>++</font><font color=Magenta>")"</font>-<a name="(line46)"></a><a name="nest"></a>nest <font color=Green><u>_</u></font> string <font color=Red>=</font> string-<a name="(line47)"></a>-<a name="(line48)"></a>-<a name="(line49)"></a>-<a name="(line50)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line51)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x-<a name="(line52)"></a>-<a name="(line53)"></a><a name="maybe"></a>maybe f Nothing <font color=Red>=</font> empty-<a name="(line54)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line55)"></a>-<a name="(line56)"></a><font color=Blue>--peref p = text "%" <> text p <> text ";"</font>+<a name="(line35)"></a><a name="Doc"></a><font color=Green><u>type</u></font> Doc <font color=Red>=</font> String+<a name="(line36)"></a><a name="empty"></a>empty <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line37)"></a>empty <font color=Red>=</font> <font color=Magenta>""</font>+<a name="(line38)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line39)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>"\n"</font> <font color=Cyan>++</font> b+<a name="(line40)"></a><a name="vcat"></a>vcat <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line41)"></a>vcat a <font color=Red>=</font> foldr <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> [] a+<a name="(line42)"></a><a name="hcat"></a>hcat <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>a<font color=Red>]</font><font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font>+<a name="(line43)"></a>hcat <font color=Red>=</font> concat+<a name="(line44)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan><></font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font>+<a name="(line45)"></a><font color=Cyan>(</font><font color=Cyan><></font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>+<a name="(line46)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan><+></font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line47)"></a><font color=Cyan>(</font><font color=Cyan><+></font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>" "</font> <font color=Cyan>++</font> b+<a name="(line48)"></a><a name="fsep"></a>fsep <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line49)"></a>fsep <font color=Red>=</font> vcat+<a name="(line50)"></a><a name="text"></a>text <font color=Red>::</font> t <font color=Red>-></font> t+<a name="(line51)"></a>text string <font color=Red>=</font> string+<a name="(line52)"></a><a name="parens"></a>parens <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line53)"></a>parens string <font color=Red>=</font> <font color=Magenta>"("</font><font color=Cyan>++</font>string<font color=Cyan>++</font><font color=Magenta>")"</font>+<a name="(line54)"></a><a name="nest"></a>nest <font color=Red>::</font> t <font color=Red>-></font> t1 <font color=Red>-></font> t1+<a name="(line55)"></a>nest <font color=Green><u>_</u></font> string <font color=Red>=</font> string+<a name="(line56)"></a> <a name="(line57)"></a>-<a name="(line58)"></a><font color=Blue>----</font>-<a name="(line59)"></a>-<a name="(line60)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-></font> Doc-<a name="(line61)"></a><a name="prolog"></a>prolog <font color=Red>::</font> Prolog <font color=Red>-></font> Doc-<a name="(line62)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> XMLDecl <font color=Red>-></font> Doc-<a name="(line63)"></a><a name="misc"></a>misc <font color=Red>::</font> Misc <font color=Red>-></font> Doc-<a name="(line64)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> Bool <font color=Red>-></font> Doc-<a name="(line65)"></a>-<a name="(line66)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-></font> Doc-<a name="(line67)"></a><a name="markupdecl"></a>markupdecl <font color=Red>::</font> MarkupDecl <font color=Red>-></font> Doc-<a name="(line68)"></a><a name="extsubset"></a>extsubset <font color=Red>::</font> ExtSubset <font color=Red>-></font> Doc-<a name="(line69)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-></font> Doc-<a name="(line70)"></a><a name="cp"></a>cp <font color=Red>::</font> CP <font color=Red>-></font> Doc-<a name="(line71)"></a>-<a name="(line72)"></a><a name="element"></a>element <font color=Red>::</font> Element i <font color=Red>-></font> Doc-<a name="(line73)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-></font> Doc <font color=Cyan>--etc</font>-<a name="(line74)"></a><a name="content"></a>content <font color=Red>::</font> Content i <font color=Red>-></font> Doc-<a name="(line75)"></a>-<a name="(line76)"></a><font color=Blue>----</font>-<a name="(line77)"></a>-<a name="(line78)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>-<a name="(line79)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>-<a name="(line80)"></a> vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line81)"></a> maybe doctypedecl dtd <font color=Cyan>$$</font>-<a name="(line82)"></a> vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>-<a name="(line83)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml version='"</font> <font color=Cyan><></font> text v <font color=Cyan><></font> text <font color=Magenta>"'"</font> <font color=Cyan><+></font>-<a name="(line84)"></a> maybe encodingdecl e <font color=Cyan><+></font>-<a name="(line85)"></a> maybe sddecl sd <font color=Cyan><+></font>-<a name="(line86)"></a> text <font color=Magenta>"?>"</font>-<a name="(line87)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!--"</font> <font color=Cyan><+></font> text s <font color=Cyan><+></font> text <font color=Magenta>"-->"</font>-<a name="(line88)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> text s <font color=Cyan><+></font> text <font color=Magenta>"?>"</font>-<a name="(line89)"></a>sddecl sd <font color=Red>|</font> sd <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>-<a name="(line90)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>-<a name="(line91)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> -<a name="(line92)"></a> hd <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line93)"></a> <font color=Green><u>else</u></font> hd <font color=Cyan><+></font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>-<a name="(line94)"></a> vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]>"</font>-<a name="(line95)"></a> <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"<!DOCTYPE"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line96)"></a> maybe externalid eid-<a name="(line97)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font> <font color=Red>=</font> elementdecl e-<a name="(line98)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font> <font color=Red>=</font> attlistdecl a-<a name="(line99)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font> <font color=Red>=</font> entitydecl e-<a name="(line100)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font> <font color=Red>=</font> notationdecl n-<a name="(line101)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font> <font color=Red>=</font> misc m-<a name="(line102)"></a><font color=Blue>--markupdecl (MarkupPE p m) = peref p</font>-<a name="(line103)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>-<a name="(line104)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>-<a name="(line105)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font> <font color=Red>=</font> markupdecl m-<a name="(line106)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c-<a name="(line107)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e) = peref p</font>-<a name="(line108)"></a>-<a name="(line109)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font>-<a name="(line110)"></a> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"/>"</font>-<a name="(line111)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>-<a name="(line112)"></a><font color=Blue>-- | any isText cs = text "<" <> text n <+> fsep (map attribute as) <></font>-<a name="(line113)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <></font>-<a name="(line114)"></a><font color=Blue>-- text "</" <> text n <> text ">"</font>-<a name="(line115)"></a> <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line116)"></a> text <font color=Magenta>">"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line117)"></a> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line118)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty-<a name="(line119)"></a> <font color=Green><u>in</u></font> d <font color=Cyan><></font> c-<a name="(line120)"></a>-<a name="(line121)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line122)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line123)"></a>isText <font color=Green><u>_</u></font> <font color=Red>=</font> False-<a name="(line124)"></a>-<a name="(line125)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c-<a name="(line126)"></a> <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan><></font>-<a name="(line127)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>-<a name="(line128)"></a> <font color=Cyan>,</font> text <font color=Magenta>"/>"</font><font color=Cyan>)</font>-<a name="(line129)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c-<a name="(line130)"></a><font color=Blue>-- | any isText cs = ( c <> element e, empty)</font>-<a name="(line131)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>">"</font><font color=Cyan>)</font>-<a name="(line132)"></a> <font color=Green><u>in</u></font>-<a name="(line133)"></a> <font color=Cyan>(</font> c <font color=Cyan><></font>-<a name="(line134)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line135)"></a> nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan><></font> <font color=Blue>--- $$</font>-<a name="(line136)"></a> d0 <font color=Cyan><></font> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n-<a name="(line137)"></a> <font color=Cyan>,</font> text <font color=Magenta>">"</font><font color=Cyan>)</font>-<a name="(line138)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> carryelem e c-<a name="(line139)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line140)"></a>carrycontent <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line141)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line142)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line143)"></a>-<a name="(line144)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-></font>c<font color=Red>-></font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> c <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line145)"></a>carryscan f [] c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line146)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c-<a name="(line147)"></a> <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0-<a name="(line148)"></a> <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>-<a name="(line149)"></a>-<a name="(line150)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>-<a name="(line151)"></a><font color=Blue>-- | isText (head cs) =</font>-<a name="(line152)"></a><font color=Blue>-- ( start <></font>-<a name="(line153)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <> text "</" <> text n</font>-<a name="(line154)"></a><font color=Blue>-- , text ">")</font>-<a name="(line155)"></a><font color=Blue>-- | otherwise =</font>-<a name="(line156)"></a><font color=Blue>-- let (d,c0) = foldl carrycontent (start, text ">") cs in</font>-<a name="(line157)"></a><font color=Blue>-- ( d <> c0 <> text "</" <> text n</font>-<a name="(line158)"></a><font color=Blue>-- , text ">")</font>-<a name="(line159)"></a><font color=Blue>-- where start = c <> text "<" <> text n <+> fsep (map attribute as)</font>-<a name="(line160)"></a><font color=Blue>--</font>-<a name="(line161)"></a><font color=Blue>--carrycontent (d,c) (CElem e) = let (d',c') = carryelem e c in</font>-<a name="(line162)"></a><font color=Blue>-- (d $$ nest 2 d', c')</font>-<a name="(line163)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d <> c <> chardata s, empty)</font>-<a name="(line164)"></a><font color=Blue>--carrycontent (d,c) (CRef r) = (d <> c <> reference r,empty)</font>-<a name="(line165)"></a><font color=Blue>--carrycontent (d,c) (CMisc m) = (d $$ c <> misc m, empty)</font>-<a name="(line166)"></a>-<a name="(line167)"></a>-<a name="(line168)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> text <font color=Magenta>"="</font> <font color=Cyan><></font> attvalue v-<a name="(line169)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> element e-<a name="(line170)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s-<a name="(line171)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cdsect s-<a name="(line172)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> reference r-<a name="(line173)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> misc m-<a name="(line174)"></a>-<a name="(line175)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ELEMENT"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line176)"></a> contentspec cs <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line177)"></a><a name="contentspec"></a>contentspec EMPTY <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>-<a name="(line178)"></a>contentspec ANY <font color=Red>=</font> text <font color=Magenta>"ANY"</font>-<a name="(line179)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font> <font color=Red>=</font> mixed m-<a name="(line180)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font> <font color=Red>=</font> cp c-<a name="(line181)"></a><font color=Blue>--contentspec (ContentPE p cs) = peref p</font>-<a name="(line182)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> modifier m-<a name="(line183)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line184)"></a> modifier m-<a name="(line185)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line186)"></a> modifier m-<a name="(line187)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c) = peref p</font>-<a name="(line188)"></a>modifier None <font color=Red>=</font> empty-<a name="(line189)"></a>modifier Query <font color=Red>=</font> text <font color=Magenta>"?"</font>-<a name="(line190)"></a>modifier Star <font color=Red>=</font> text <font color=Magenta>"*"</font>-<a name="(line191)"></a>modifier Plus <font color=Red>=</font> text <font color=Magenta>"+"</font>-<a name="(line192)"></a><a name="mixed"></a>mixed PCDATA <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>-<a name="(line193)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan><+></font>-<a name="(line194)"></a> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line195)"></a> text <font color=Magenta>")*"</font>-<a name="(line196)"></a>-<a name="(line197)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ATTLIST"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line198)"></a> fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>">"</font>-<a name="(line199)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><+></font> atttype t <font color=Cyan><+></font> defaultdecl d-<a name="(line200)"></a><a name="atttype"></a>atttype StringType <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>-<a name="(line201)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> <font color=Red>=</font> tokenizedtype t-<a name="(line202)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font> <font color=Red>=</font> enumeratedtype t-<a name="(line203)"></a><a name="tokenizedtype"></a>tokenizedtype ID <font color=Red>=</font> text <font color=Magenta>"ID"</font>-<a name="(line204)"></a>tokenizedtype IDREF <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>-<a name="(line205)"></a>tokenizedtype IDREFS <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>-<a name="(line206)"></a>tokenizedtype ENTITY <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>-<a name="(line207)"></a>tokenizedtype ENTITIES <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>-<a name="(line208)"></a>tokenizedtype NMTOKEN <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>-<a name="(line209)"></a>tokenizedtype NMTOKENS <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>-<a name="(line210)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n-<a name="(line211)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e-<a name="(line212)"></a><a name="notationtype"></a>notationtype ns <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan><+></font>-<a name="(line213)"></a> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line214)"></a><a name="enumeration"></a>enumeration ns <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line215)"></a><a name="defaultdecl"></a>defaultdecl REQUIRED <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>-<a name="(line216)"></a>defaultdecl IMPLIED <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>-<a name="(line217)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan><+></font> attvalue a-<a name="(line218)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"<![INCLUDE ["</font> <font color=Cyan><+></font>-<a name="(line219)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"]]>"</font>-<a name="(line220)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<![IGNORE ["</font> <font color=Cyan><+></font>-<a name="(line221)"></a> fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan><+></font> text <font color=Magenta>"]]>"</font>-<a name="(line222)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font> <font color=Red>=</font> empty-<a name="(line223)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>-<a name="(line224)"></a> <font color=Red>=</font> ignore i <font color=Cyan><+></font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>-<a name="(line225)"></a> <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<![["</font> <font color=Cyan><+></font>-<a name="(line226)"></a> ignoresectcontents ics <font color=Cyan><+></font>-<a name="(line227)"></a> text <font color=Magenta>"]]>"</font> <font color=Cyan><+></font> ignore i-<a name="(line228)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font> <font color=Red>=</font> entityref er-<a name="(line229)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font> <font color=Red>=</font> charref cr-<a name="(line230)"></a><a name="entityref"></a>entityref n <font color=Red>=</font> text <font color=Magenta>"&"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>";"</font>-<a name="(line231)"></a><a name="charref"></a>charref c <font color=Red>=</font> text <font color=Magenta>"&#"</font> <font color=Cyan><></font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>";"</font>-<a name="(line232)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font> <font color=Red>=</font> gedecl d-<a name="(line233)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font> <font color=Red>=</font> pedecl d-<a name="(line234)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font> entitydef ed <font color=Cyan><></font>-<a name="(line235)"></a> text <font color=Magenta>">"</font>-<a name="(line236)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY %"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> pedef pd <font color=Cyan><></font>-<a name="(line237)"></a> text <font color=Magenta>">"</font>-<a name="(line238)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ev-<a name="(line239)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan><+></font> maybe ndatadecl nd-<a name="(line240)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ev-<a name="(line241)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font> <font color=Red>=</font> externalid eid-<a name="(line242)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan><+></font> systemliteral sl-<a name="(line243)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan><+></font> pubidliteral i <font color=Cyan><+></font>-<a name="(line244)"></a> systemliteral sl-<a name="(line245)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan><+></font> text n-<a name="(line246)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml"</font> <font color=Cyan><+></font> maybe text vi <font color=Cyan><+></font>-<a name="(line247)"></a> encodingdecl ed <font color=Cyan><></font> text <font color=Magenta>"?>"</font>-<a name="(line248)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan><+></font> content c-<a name="(line249)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan><+></font>-<a name="(line250)"></a> vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>-<a name="(line251)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!NOTATION"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>-<a name="(line252)"></a> either externalid publicid e <font color=Cyan><></font>-<a name="(line253)"></a> text <font color=Magenta>">"</font>-<a name="(line254)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan><+></font> pubidliteral p-<a name="(line255)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line256)"></a><a name="nmtoken"></a>nmtoken s <font color=Red>=</font> text s-<a name="(line257)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font>-<a name="(line258)"></a> hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan><></font>-<a name="(line259)"></a> text <font color=Magenta>"\""</font>-<a name="(line260)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>-<a name="(line261)"></a> <font color=Red>|</font> containsDoubleQuote evs <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line262)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line263)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> text s-<a name="(line264)"></a><font color=Blue>--ev (EVPERef p e) = peref p</font>-<a name="(line265)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font> <font color=Red>=</font> reference r-<a name="(line266)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>-<a name="(line267)"></a> <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line268)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line269)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>-<a name="(line270)"></a> <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>-<a name="(line271)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>-<a name="(line272)"></a><a name="chardata"></a>chardata s <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s-<a name="(line273)"></a><a name="cdsect"></a>cdsect c <font color=Red>=</font> text <font color=Magenta>"<![CDATA["</font> <font color=Cyan><></font> chardata c <font color=Cyan><></font> text <font color=Magenta>"]]>"</font>-<a name="(line274)"></a>-<a name="(line275)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>-<a name="(line276)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs-<a name="(line277)"></a> <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s-<a name="(line278)"></a> csq <font color=Green><u>_</u></font> <font color=Red>=</font> False-<a name="(line279)"></a>+<a name="(line58)"></a>+<a name="(line59)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-></font> t1<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>t2 <font color=Red>-></font> t1<font color=Cyan>)</font> <font color=Red>-></font> Either t t2 <font color=Red>-></font> t1+<a name="(line60)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font> <font color=Red>=</font> f x+<a name="(line61)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x+<a name="(line62)"></a>+<a name="(line63)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> Maybe t <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line64)"></a>maybe <font color=Green><u>_</u></font> Nothing <font color=Red>=</font> empty+<a name="(line65)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x+<a name="(line66)"></a>+<a name="(line67)"></a><font color=Blue>--peref p = text "%" <> text p <> text ";"</font>+<a name="(line68)"></a>+<a name="(line69)"></a><font color=Blue>----</font>+<a name="(line70)"></a>+<a name="(line71)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-></font> Doc+<a name="(line72)"></a><a name="prolog"></a>prolog <font color=Red>::</font> Prolog <font color=Red>-></font> Doc+<a name="(line73)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> XMLDecl <font color=Red>-></font> Doc+<a name="(line74)"></a><a name="misc"></a>misc <font color=Red>::</font> Misc <font color=Red>-></font> Doc+<a name="(line75)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> Bool <font color=Red>-></font> Doc+<a name="(line76)"></a>+<a name="(line77)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-></font> Doc+<a name="(line78)"></a><a name="markupdecl"></a>markupdecl <font color=Red>::</font> MarkupDecl <font color=Red>-></font> Doc+<a name="(line79)"></a><a name="cp"></a><font color=Blue>-- extsubset :: ExtSubset -> Doc</font>+<a name="(line80)"></a><font color=Blue>-- extsubsetdecl :: ExtSubsetDecl -> Doc</font>+<a name="(line81)"></a>cp <font color=Red>::</font> CP <font color=Red>-></font> Doc+<a name="(line82)"></a>+<a name="(line83)"></a><a name="element"></a>element <font color=Red>::</font> Element i <font color=Red>-></font> Doc+<a name="(line84)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-></font> Doc <font color=Cyan>--etc</font>+<a name="(line85)"></a><a name="content"></a>content <font color=Red>::</font> Content i <font color=Red>-></font> Doc+<a name="(line86)"></a>+<a name="(line87)"></a><font color=Blue>----</font>+<a name="(line88)"></a>+<a name="(line89)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>+<a name="(line90)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>+<a name="(line91)"></a> vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line92)"></a> maybe doctypedecl dtd <font color=Cyan>$$</font>+<a name="(line93)"></a> vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>+<a name="(line94)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?xml version='"</font> <font color=Cyan><></font> text v <font color=Cyan><></font> text <font color=Magenta>"'"</font> <font color=Cyan><+></font>+<a name="(line95)"></a> maybe encodingdecl e <font color=Cyan><+></font>+<a name="(line96)"></a> maybe sddecl sd <font color=Cyan><+></font>+<a name="(line97)"></a> text <font color=Magenta>"?>"</font>+<a name="(line98)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!--"</font> <font color=Cyan><+></font> text s <font color=Cyan><+></font> text <font color=Magenta>"-->"</font>+<a name="(line99)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<?"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> text s <font color=Cyan><+></font> text <font color=Magenta>"?>"</font>+<a name="(line100)"></a>sddecl sd <font color=Red>|</font> sd <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>+<a name="(line101)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>+<a name="(line102)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font>+<a name="(line103)"></a> hd <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line104)"></a> <font color=Green><u>else</u></font> hd <font color=Cyan><+></font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>+<a name="(line105)"></a> vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]>"</font>+<a name="(line106)"></a> <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"<!DOCTYPE"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line107)"></a> maybe externalid eid+<a name="(line108)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font> <font color=Red>=</font> elementdecl e+<a name="(line109)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font> <font color=Red>=</font> attlistdecl a+<a name="(line110)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font> <font color=Red>=</font> entitydecl e+<a name="(line111)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font> <font color=Red>=</font> notationdecl n+<a name="(line112)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font> <font color=Red>=</font> misc m+<a name="(line113)"></a><font color=Blue>--markupdecl (MarkupPE p m) = peref p</font>+<a name="(line114)"></a><font color=Blue>-- _ (ExtSubset t ds) = maybe textdecl t $$</font>+<a name="(line115)"></a><font color=Blue>-- vcat (map extsubsetdecl ds)</font>+<a name="(line116)"></a><font color=Blue>-- _ (ExtMarkupDecl m) = markupdecl m</font>+<a name="(line117)"></a><font color=Blue>-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c</font>+<a name="(line118)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e) = peref p</font>+<a name="(line119)"></a>+<a name="(line120)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font>+<a name="(line121)"></a> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"/>"</font>+<a name="(line122)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>+<a name="(line123)"></a><font color=Blue>-- | any isText cs = text "<" <> text n <+> fsep (map attribute as) <></font>+<a name="(line124)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <></font>+<a name="(line125)"></a><font color=Blue>-- text "</" <> text n <> text ">"</font>+<a name="(line126)"></a> <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line127)"></a> text <font color=Magenta>">"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line128)"></a> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line129)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty+<a name="(line130)"></a> <font color=Green><u>in</u></font> d <font color=Cyan><></font> c+<a name="(line131)"></a>+<a name="(line132)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-></font> Bool+<a name="(line133)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line134)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line135)"></a>isText <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line136)"></a>+<a name="(line137)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c+<a name="(line138)"></a> <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan><></font>+<a name="(line139)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>+<a name="(line140)"></a> <font color=Cyan>,</font> text <font color=Magenta>"/>"</font><font color=Cyan>)</font>+<a name="(line141)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c+<a name="(line142)"></a><font color=Blue>-- | any isText cs = ( c <> element e, empty)</font>+<a name="(line143)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>">"</font><font color=Cyan>)</font>+<a name="(line144)"></a> <font color=Green><u>in</u></font>+<a name="(line145)"></a> <font color=Cyan>(</font> c <font color=Cyan><></font>+<a name="(line146)"></a> text <font color=Magenta>"<"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line147)"></a> nest <font color=Cyan>(</font><font color=Magenta>2</font> <font color=Red>::</font> Int<font color=Cyan>)</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan><></font> <font color=Blue>--- $$</font>+<a name="(line148)"></a> d0 <font color=Cyan><></font> text <font color=Magenta>"</"</font> <font color=Cyan><></font> text n+<a name="(line149)"></a> <font color=Cyan>,</font> text <font color=Magenta>">"</font><font color=Cyan>)</font>+<a name="(line150)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font> Content t <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>,</font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font>+<a name="(line151)"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>,</font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font>+<a name="(line152)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> carryelem e c+<a name="(line153)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line154)"></a>carrycontent <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line155)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line156)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan><></font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line157)"></a>+<a name="(line158)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-></font>c<font color=Red>-></font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> c <font color=Red>-></font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line159)"></a>carryscan <font color=Green><u>_</u></font> [] c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line160)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c+<a name="(line161)"></a> <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0+<a name="(line162)"></a> <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>+<a name="(line163)"></a>+<a name="(line164)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>+<a name="(line165)"></a><font color=Blue>-- | isText (head cs) =</font>+<a name="(line166)"></a><font color=Blue>-- ( start <></font>+<a name="(line167)"></a><font color=Blue>-- text ">" <> hcat (map content cs) <> text "</" <> text n</font>+<a name="(line168)"></a><font color=Blue>-- , text ">")</font>+<a name="(line169)"></a><font color=Blue>-- | otherwise =</font>+<a name="(line170)"></a><font color=Blue>-- let (d,c0) = foldl carrycontent (start, text ">") cs in</font>+<a name="(line171)"></a><font color=Blue>-- ( d <> c0 <> text "</" <> text n</font>+<a name="(line172)"></a><font color=Blue>-- , text ">")</font>+<a name="(line173)"></a><font color=Blue>-- where start = c <> text "<" <> text n <+> fsep (map attribute as)</font>+<a name="(line174)"></a><font color=Blue>--</font>+<a name="(line175)"></a><font color=Blue>--carrycontent (d,c) (CElem e) = let (d',c') = carryelem e c in</font>+<a name="(line176)"></a><font color=Blue>-- (d $$ nest 2 d', c')</font>+<a name="(line177)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d <> c <> chardata s, empty)</font>+<a name="(line178)"></a><font color=Blue>--carrycontent (d,c) (CRef r) = (d <> c <> reference r,empty)</font>+<a name="(line179)"></a><font color=Blue>--carrycontent (d,c) (CMisc m) = (d $$ c <> misc m, empty)</font>+<a name="(line180)"></a>+<a name="(line181)"></a>+<a name="(line182)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> text <font color=Magenta>"="</font> <font color=Cyan><></font> attvalue v+<a name="(line183)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> element e+<a name="(line184)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s+<a name="(line185)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cdsect s+<a name="(line186)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> reference r+<a name="(line187)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> misc m+<a name="(line188)"></a>+<a name="(line189)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line190)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ELEMENT"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line191)"></a> contentspec cs <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line192)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line193)"></a>contentspec EMPTY <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>+<a name="(line194)"></a>contentspec ANY <font color=Red>=</font> text <font color=Magenta>"ANY"</font>+<a name="(line195)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font> <font color=Red>=</font> mixed m+<a name="(line196)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font> <font color=Red>=</font> cp c+<a name="(line197)"></a><font color=Blue>--contentspec (ContentPE p cs) = peref p</font>+<a name="(line198)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><></font> modifier m+<a name="(line199)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line200)"></a> modifier m+<a name="(line201)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line202)"></a> modifier m+<a name="(line203)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c) = peref p</font>+<a name="(line204)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line205)"></a>modifier None <font color=Red>=</font> empty+<a name="(line206)"></a>modifier Query <font color=Red>=</font> text <font color=Magenta>"?"</font>+<a name="(line207)"></a>modifier Star <font color=Red>=</font> text <font color=Magenta>"*"</font>+<a name="(line208)"></a>modifier Plus <font color=Red>=</font> text <font color=Magenta>"+"</font>+<a name="(line209)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line210)"></a>mixed PCDATA <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>+<a name="(line211)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan><+></font>+<a name="(line212)"></a> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line213)"></a> text <font color=Magenta>")*"</font>+<a name="(line214)"></a>+<a name="(line215)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line216)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ATTLIST"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line217)"></a> fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>">"</font>+<a name="(line218)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line219)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font> <font color=Red>=</font> text n <font color=Cyan><+></font> atttype t <font color=Cyan><+></font> defaultdecl d+<a name="(line220)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line221)"></a>atttype StringType <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>+<a name="(line222)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> <font color=Red>=</font> tokenizedtype t+<a name="(line223)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font> <font color=Red>=</font> enumeratedtype t+<a name="(line224)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line225)"></a>tokenizedtype ID <font color=Red>=</font> text <font color=Magenta>"ID"</font>+<a name="(line226)"></a>tokenizedtype IDREF <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>+<a name="(line227)"></a>tokenizedtype IDREFS <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>+<a name="(line228)"></a>tokenizedtype ENTITY <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>+<a name="(line229)"></a>tokenizedtype ENTITIES <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>+<a name="(line230)"></a>tokenizedtype NMTOKEN <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>+<a name="(line231)"></a>tokenizedtype NMTOKENS <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>+<a name="(line232)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line233)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n+<a name="(line234)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e+<a name="(line235)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line236)"></a>notationtype ns <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan><+></font>+<a name="(line237)"></a> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line238)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line239)"></a>enumeration ns <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line240)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line241)"></a>defaultdecl REQUIRED <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>+<a name="(line242)"></a>defaultdecl IMPLIED <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>+<a name="(line243)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan><+></font> attvalue a+<a name="(line244)"></a><a name="reference"></a><font color=Blue>-- _ (IncludeSect i)= text "<![INCLUDE [" <+></font>+<a name="(line245)"></a><font color=Blue>-- vcat (map extsubsetdecl i) <+> text "]]>"</font>+<a name="(line246)"></a><font color=Blue>-- conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+></font>+<a name="(line247)"></a><font color=Blue>-- fsep (map ignoresectcontents i) <+> text "]]>"</font>+<a name="(line248)"></a><font color=Blue>-- _ (Ignore) = empty</font>+<a name="(line249)"></a><font color=Blue>-- _ (IgnoreSectContents i is)</font>+<a name="(line250)"></a><font color=Blue>-- = ignore i <+> vcat (map internal is)</font>+<a name="(line251)"></a><font color=Blue>-- where internal (ics,i) = text "<![[" <+></font>+<a name="(line252)"></a><font color=Blue>-- ignoresectcontents ics <+></font>+<a name="(line253)"></a><font color=Blue>-- text "]]>" <+> ignore i</font>+<a name="(line254)"></a>reference <font color=Red>::</font> Reference <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line255)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font> <font color=Red>=</font> entityref er+<a name="(line256)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font> <font color=Red>=</font> charref cr+<a name="(line257)"></a><a name="entityref"></a>entityref <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line258)"></a>entityref n <font color=Red>=</font> text <font color=Magenta>"&"</font> <font color=Cyan><></font> text n <font color=Cyan><></font> text <font color=Magenta>";"</font>+<a name="(line259)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=></font> a <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line260)"></a>charref c <font color=Red>=</font> text <font color=Magenta>"&#"</font> <font color=Cyan><></font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>";"</font>+<a name="(line261)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line262)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font> <font color=Red>=</font> gedecl d+<a name="(line263)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font> <font color=Red>=</font> pedecl d+<a name="(line264)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line265)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font> entitydef ed <font color=Cyan><></font>+<a name="(line266)"></a> text <font color=Magenta>">"</font>+<a name="(line267)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line268)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!ENTITY %"</font> <font color=Cyan><></font> text n <font color=Cyan><+></font> pedef pd <font color=Cyan><></font>+<a name="(line269)"></a> text <font color=Magenta>">"</font>+<a name="(line270)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line271)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ew+<a name="(line272)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan><+></font> maybe ndatadecl nd+<a name="(line273)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line274)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font> <font color=Red>=</font> entityvalue ew+<a name="(line275)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font> <font color=Red>=</font> externalid eid+<a name="(line276)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line277)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan><+></font> systemliteral sl+<a name="(line278)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan><+></font> pubidliteral i <font color=Cyan><+></font>+<a name="(line279)"></a> systemliteral sl+<a name="(line280)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line281)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan><+></font> text n+<a name="(line282)"></a><a name="notationdecl"></a><font color=Blue>-- _ (TextDecl vi ed) = text "<?xml" <+> maybe text vi <+></font>+<a name="(line283)"></a><font color=Blue>-- encodingdecl ed <> text "?>"</font>+<a name="(line284)"></a><font color=Blue>-- _ (ExtParsedEnt t c)= maybe textdecl t <+> content c</font>+<a name="(line285)"></a><font color=Blue>-- _ (ExtPE t esd) = maybe textdecl t <+></font>+<a name="(line286)"></a><font color=Blue>-- vcat (map extsubsetdecl esd)</font>+<a name="(line287)"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line288)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"<!NOTATION"</font> <font color=Cyan><+></font> text n <font color=Cyan><+></font>+<a name="(line289)"></a> either externalid publicid e <font color=Cyan><></font>+<a name="(line290)"></a> text <font color=Magenta>">"</font>+<a name="(line291)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line292)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan><+></font> pubidliteral p+<a name="(line293)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line294)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line295)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> t <font color=Red>-></font> t+<a name="(line296)"></a>nmtoken s <font color=Red>=</font> text s+<a name="(line297)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line298)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font>+<a name="(line299)"></a> hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan><></font>+<a name="(line300)"></a> text <font color=Magenta>"\""</font>+<a name="(line301)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line302)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>+<a name="(line303)"></a> <font color=Red>|</font> containsDoubleQuote evs <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line304)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line305)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-></font> String+<a name="(line306)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> text s+<a name="(line307)"></a><font color=Blue>--ev (EVPERef p e) = peref p</font>+<a name="(line308)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font> <font color=Red>=</font> reference r+<a name="(line309)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line310)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>+<a name="(line311)"></a> <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line312)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line313)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line314)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>+<a name="(line315)"></a> <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"'"</font>+<a name="(line316)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan><></font> text s <font color=Cyan><></font> text <font color=Magenta>"\""</font>+<a name="(line317)"></a><a name="chardata"></a>chardata <font color=Red>::</font> t <font color=Red>-></font> t+<a name="(line318)"></a>chardata s <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s+<a name="(line319)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line320)"></a>cdsect c <font color=Red>=</font> text <font color=Magenta>"<![CDATA["</font> <font color=Cyan><></font> chardata c <font color=Cyan><></font> text <font color=Magenta>"]]>"</font>+<a name="(line321)"></a>+<a name="(line322)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>+<a name="(line323)"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-></font> Bool+<a name="(line324)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs+<a name="(line325)"></a> <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s+<a name="(line326)"></a> csq <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line327)"></a> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/TypeMapping.html view
@@ -92,118 +92,133 @@ <a name="(line90)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>)</font> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font> <a name="(line91)"></a> toHType p <font color=Red>=</font> Tuple <font color=Red>[</font>toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Red>]</font> <a name="(line92)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> p-<a name="(line93)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line94)"></a> toHType m <font color=Red>=</font> Maybe <font color=Cyan>(</font>toHType x<font color=Cyan>)</font> <font color=Green><u>where</u></font> <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> m-<a name="(line95)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>)</font> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line96)"></a> toHType m <font color=Red>=</font> Defined <font color=Magenta>"Either"</font> <font color=Red>[</font>hx<font color=Cyan>,</font> hy<font color=Red>]</font>-<a name="(line97)"></a> <font color=Red>[</font> Constr <font color=Magenta>"Left"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font>-<a name="(line98)"></a> <font color=Cyan>,</font> Constr <font color=Magenta>"Right"</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>-<a name="(line99)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font> <font color=Red>=</font> m-<a name="(line100)"></a> <font color=Cyan>(</font>Right y<font color=Cyan>)</font> <font color=Red>=</font> m-<a name="(line101)"></a> hx <font color=Red>=</font> toHType x-<a name="(line102)"></a> hy <font color=Red>=</font> toHType y-<a name="(line103)"></a>-<a name="(line104)"></a><font color=Green><u>instance</u></font> HTypeable a <font color=Red>=></font> HTypeable <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>-<a name="(line105)"></a> toHType xs <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font> <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> String-<a name="(line106)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> List <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>-<a name="(line107)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs-<a name="(line108)"></a>-<a name="(line109)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line110)"></a>-<a name="(line111)"></a><a name="toDTD"></a><font color=Blue>-- | 'toDTD' converts a concrete representation of the Haskell type of</font>-<a name="(line112)"></a><font color=Blue>-- a value (obtained by the method 'toHType') into a real DocTypeDecl.</font>-<a name="(line113)"></a><font color=Blue>-- It ensures that PERefs are defined before they are used, and that no</font>-<a name="(line114)"></a><font color=Blue>-- element or attribute-list is declared more than once.</font>-<a name="(line115)"></a>toDTD <font color=Red>::</font> HType <font color=Red>-></font> DocTypeDecl-<a name="(line116)"></a>toDTD ht <font color=Red>=</font>-<a name="(line117)"></a> DTD <font color=Cyan>(</font>toplevel ht<font color=Cyan>)</font> Nothing <font color=Cyan>(</font>macrosFirst <font color=Cyan>(</font>reverse <font color=Cyan>(</font>h2d True [] [] <font color=Red>[</font>ht<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line118)"></a> <font color=Green><u>where</u></font>-<a name="(line119)"></a> macrosFirst <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>-<a name="(line120)"></a> macrosFirst decls <font color=Red>=</font> concat <font color=Red>[</font>p<font color=Cyan>,</font> p'<font color=Red>]</font> <font color=Green><u>where</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font> p'<font color=Cyan>)</font> <font color=Red>=</font> partition f decls-<a name="(line121)"></a> f <font color=Cyan>(</font>Entity <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line122)"></a> f <font color=Green><u>_</u></font> <font color=Red>=</font> False-<a name="(line123)"></a> toplevel ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> showHType ht <font color=Magenta>"-XML"</font>-<a name="(line124)"></a> toplevel ht<font color=Red>@</font><font color=Green><u>_</u></font> <font color=Red>=</font> showHType ht <font color=Magenta>""</font>-<a name="(line125)"></a> c0 <font color=Red>=</font> False-<a name="(line126)"></a> h2d <font color=Red>::</font> Bool <font color=Red>-></font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Constr<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>-<a name="(line127)"></a> <font color=Blue>-- toplevel? history history remainingwork result</font>-<a name="(line128)"></a> h2d c history chist [] <font color=Red>=</font> []-<a name="(line129)"></a> h2d c history chist <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>hts<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line130)"></a> <font color=Green><u>if</u></font> ht <font color=Cyan>`elem`</font> history <font color=Green><u>then</u></font> h2d c0 history chist hts-<a name="(line131)"></a> <font color=Green><u>else</u></font>-<a name="(line132)"></a> <font color=Green><u>case</u></font> ht <font color=Green><u>of</u></font>-<a name="(line133)"></a> Maybe ht0 <font color=Red>-></font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>-<a name="(line134)"></a> List ht0 <font color=Red>-></font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>-<a name="(line135)"></a> Tuple hts0 <font color=Red>-></font> <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>declelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line136)"></a> <font color=Cyan>(</font>h2d c0 history chist <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line137)"></a> Prim s t <font color=Red>-></font> declprim ht <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts-<a name="(line138)"></a> String <font color=Red>-></font> declstring<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts-<a name="(line139)"></a> Defined s <font color=Green><u>_</u></font> cs <font color=Red>-></font>-<a name="(line140)"></a> <font color=Green><u>let</u></font> hts0 <font color=Red>=</font> concatMap grab cs <font color=Green><u>in</u></font>-<a name="(line141)"></a> <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>decltopelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>declmacro ht chist<font color=Cyan>)</font>-<a name="(line142)"></a> <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> <font color=Cyan>(</font>cs<font color=Cyan>++</font>chist<font color=Cyan>)</font> <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font>-<a name="(line143)"></a> declelem ht <font color=Red>=</font>-<a name="(line144)"></a> Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line145)"></a> decltopelem ht <font color=Red>=</font> <font color=Blue>-- hack to avoid peref at toplevel</font>-<a name="(line146)"></a> Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>innerHtExpr ht None<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line147)"></a> declmacro ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> chist <font color=Red>=</font>-<a name="(line148)"></a> Entity <font color=Cyan>(</font>EntityPEDecl <font color=Cyan>(</font>PEDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>-<a name="(line149)"></a> concatMap <font color=Cyan>(</font>declConstr chist<font color=Cyan>)</font> cs-<a name="(line150)"></a> <font color=Green><u>where</u></font> ev <font color=Red>=</font> EntityValue <font color=Red>[</font>EVString <font color=Cyan>(</font>render <font color=Cyan>(</font>PP<font color=Cyan>.</font>cp <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line151)"></a> declConstr chist c<font color=Red>@</font><font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font>-<a name="(line152)"></a> <font color=Red>|</font> c <font color=Cyan>`notElem`</font> chist <font color=Red>=</font>-<a name="(line153)"></a> <font color=Red>[</font>Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>constrHtExpr c<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line154)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> [] -<a name="(line155)"></a> declprim <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line156)"></a> <font color=Red>[</font> Element <font color=Cyan>(</font>ElementDecl t EMPTY<font color=Cyan>)</font>-<a name="(line157)"></a> <font color=Cyan>,</font> AttList <font color=Cyan>(</font>AttListDecl t <font color=Red>[</font>AttDef <font color=Magenta>"value"</font> StringType REQUIRED<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line158)"></a> declstring <font color=Red>=</font>-<a name="(line159)"></a> Element <font color=Cyan>(</font>ElementDecl <font color=Magenta>"string"</font> <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line160)"></a> grab <font color=Cyan>(</font>Constr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> hts<font color=Cyan>)</font> <font color=Red>=</font> hts-<a name="(line161)"></a>-<a name="(line162)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> Bool <font color=Red>-></font> <font color=Cyan>(</font>a<font color=Red>-></font>a<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>a<font color=Red>-></font>a<font color=Cyan>)</font>-<a name="(line163)"></a><a name="b"></a>b <font color=Cyan>?</font> f <font color=Red>|</font> b <font color=Red>=</font> f-<a name="(line164)"></a> <font color=Red>|</font> not b <font color=Red>=</font> id-<a name="(line165)"></a>-<a name="(line166)"></a><a name="showHType"></a><font color=Blue>-- Flatten an HType to a String suitable for an XML tagname.</font>-<a name="(line167)"></a>showHType <font color=Red>::</font> HType <font color=Red>-></font> ShowS-<a name="(line168)"></a>showHType <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"maybe-"</font> <font color=Cyan>.</font> showHType ht-<a name="(line169)"></a>showHType <font color=Cyan>(</font>List ht<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"list-"</font> <font color=Cyan>.</font> showHType ht-<a name="(line170)"></a>showHType <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"tuple"</font> <font color=Cyan>.</font> shows <font color=Cyan>(</font>length hts<font color=Cyan>)</font>-<a name="(line171)"></a> <font color=Cyan>.</font> showChar <font color=Magenta>'-'</font>-<a name="(line172)"></a> <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>-<a name="(line173)"></a> <font color=Cyan>(</font>map showHType hts<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line174)"></a>showHType <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font> showString t-<a name="(line175)"></a>showHType String <font color=Red>=</font> showString <font color=Magenta>"string"</font>-<a name="(line176)"></a>showHType <font color=Cyan>(</font>Defined s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>-<a name="(line177)"></a> <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>></font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line178)"></a> <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>-<a name="(line179)"></a> <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line93)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>)</font> <font color=Red>=></font>+<a name="(line94)"></a> HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line95)"></a> toHType p <font color=Red>=</font> Tuple <font color=Red>[</font>toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d<font color=Red>]</font>+<a name="(line96)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Red>=</font> p+<a name="(line97)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>,</font> HTypeable e<font color=Cyan>)</font> <font color=Red>=></font>+<a name="(line98)"></a> HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line99)"></a> toHType p <font color=Red>=</font> Tuple <font color=Red>[</font> toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d+<a name="(line100)"></a> <font color=Cyan>,</font> toHType e <font color=Red>]</font>+<a name="(line101)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Red>=</font> p+<a name="(line102)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>,</font> HTypeable e+<a name="(line103)"></a> <font color=Cyan>,</font> HTypeable f<font color=Cyan>)</font> <font color=Red>=></font>+<a name="(line104)"></a> HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line105)"></a> toHType p <font color=Red>=</font> Tuple <font color=Red>[</font> toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d+<a name="(line106)"></a> <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f <font color=Red>]</font>+<a name="(line107)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Red>=</font> p+<a name="(line108)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line109)"></a> toHType m <font color=Red>=</font> Maybe <font color=Cyan>(</font>toHType x<font color=Cyan>)</font> <font color=Green><u>where</u></font> <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> m+<a name="(line110)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>)</font> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line111)"></a> toHType m <font color=Red>=</font> Defined <font color=Magenta>"Either"</font> <font color=Red>[</font>hx<font color=Cyan>,</font> hy<font color=Red>]</font>+<a name="(line112)"></a> <font color=Red>[</font> Constr <font color=Magenta>"Left"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font>+<a name="(line113)"></a> <font color=Cyan>,</font> Constr <font color=Magenta>"Right"</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>+<a name="(line114)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font> <font color=Red>=</font> m+<a name="(line115)"></a> <font color=Cyan>(</font>Right y<font color=Cyan>)</font> <font color=Red>=</font> m+<a name="(line116)"></a> hx <font color=Red>=</font> toHType x+<a name="(line117)"></a> hy <font color=Red>=</font> toHType y+<a name="(line118)"></a>+<a name="(line119)"></a><font color=Green><u>instance</u></font> HTypeable a <font color=Red>=></font> HTypeable <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>+<a name="(line120)"></a> toHType xs <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font> <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> String+<a name="(line121)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> List <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>+<a name="(line122)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs+<a name="(line123)"></a>+<a name="(line124)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line125)"></a>+<a name="(line126)"></a><a name="toDTD"></a><font color=Blue>-- | 'toDTD' converts a concrete representation of the Haskell type of</font>+<a name="(line127)"></a><font color=Blue>-- a value (obtained by the method 'toHType') into a real DocTypeDecl.</font>+<a name="(line128)"></a><font color=Blue>-- It ensures that PERefs are defined before they are used, and that no</font>+<a name="(line129)"></a><font color=Blue>-- element or attribute-list is declared more than once.</font>+<a name="(line130)"></a>toDTD <font color=Red>::</font> HType <font color=Red>-></font> DocTypeDecl+<a name="(line131)"></a>toDTD ht <font color=Red>=</font>+<a name="(line132)"></a> DTD <font color=Cyan>(</font>toplevel ht<font color=Cyan>)</font> Nothing <font color=Cyan>(</font>macrosFirst <font color=Cyan>(</font>reverse <font color=Cyan>(</font>h2d True [] [] <font color=Red>[</font>ht<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line133)"></a> <font color=Green><u>where</u></font>+<a name="(line134)"></a> macrosFirst <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>+<a name="(line135)"></a> macrosFirst decls <font color=Red>=</font> concat <font color=Red>[</font>p<font color=Cyan>,</font> p'<font color=Red>]</font> <font color=Green><u>where</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font> p'<font color=Cyan>)</font> <font color=Red>=</font> partition f decls+<a name="(line136)"></a> f <font color=Cyan>(</font>Entity <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line137)"></a> f <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line138)"></a> toplevel ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> showHType ht <font color=Magenta>"-XML"</font>+<a name="(line139)"></a> toplevel ht<font color=Red>@</font><font color=Green><u>_</u></font> <font color=Red>=</font> showHType ht <font color=Magenta>""</font>+<a name="(line140)"></a> c0 <font color=Red>=</font> False+<a name="(line141)"></a> h2d <font color=Red>::</font> Bool <font color=Red>-></font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>Constr<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>+<a name="(line142)"></a> <font color=Blue>-- toplevel? history history remainingwork result</font>+<a name="(line143)"></a> h2d c history chist [] <font color=Red>=</font> []+<a name="(line144)"></a> h2d c history chist <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>hts<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line145)"></a> <font color=Green><u>if</u></font> ht <font color=Cyan>`elem`</font> history <font color=Green><u>then</u></font> h2d c0 history chist hts+<a name="(line146)"></a> <font color=Green><u>else</u></font>+<a name="(line147)"></a> <font color=Green><u>case</u></font> ht <font color=Green><u>of</u></font>+<a name="(line148)"></a> Maybe ht0 <font color=Red>-></font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>+<a name="(line149)"></a> List ht0 <font color=Red>-></font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>+<a name="(line150)"></a> Tuple hts0 <font color=Red>-></font> <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>declelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line151)"></a> <font color=Cyan>(</font>h2d c0 history chist <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line152)"></a> Prim s t <font color=Red>-></font> declprim ht <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts+<a name="(line153)"></a> String <font color=Red>-></font> declstring<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts+<a name="(line154)"></a> Defined s <font color=Green><u>_</u></font> cs <font color=Red>-></font>+<a name="(line155)"></a> <font color=Green><u>let</u></font> hts0 <font color=Red>=</font> concatMap grab cs <font color=Green><u>in</u></font>+<a name="(line156)"></a> <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>decltopelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>declmacro ht chist<font color=Cyan>)</font>+<a name="(line157)"></a> <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> <font color=Cyan>(</font>cs<font color=Cyan>++</font>chist<font color=Cyan>)</font> <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font>+<a name="(line158)"></a> declelem ht <font color=Red>=</font>+<a name="(line159)"></a> Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line160)"></a> decltopelem ht <font color=Red>=</font> <font color=Blue>-- hack to avoid peref at toplevel</font>+<a name="(line161)"></a> Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>innerHtExpr ht None<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line162)"></a> declmacro ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> chist <font color=Red>=</font>+<a name="(line163)"></a> Entity <font color=Cyan>(</font>EntityPEDecl <font color=Cyan>(</font>PEDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>+<a name="(line164)"></a> concatMap <font color=Cyan>(</font>declConstr chist<font color=Cyan>)</font> cs+<a name="(line165)"></a> <font color=Green><u>where</u></font> ev <font color=Red>=</font> EntityValue <font color=Red>[</font>EVString <font color=Cyan>(</font>render <font color=Cyan>(</font>PP<font color=Cyan>.</font>cp <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>+<a name="(line166)"></a> declConstr chist c<font color=Red>@</font><font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font>+<a name="(line167)"></a> <font color=Red>|</font> c <font color=Cyan>`notElem`</font> chist <font color=Red>=</font>+<a name="(line168)"></a> <font color=Red>[</font>Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>constrHtExpr c<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>+<a name="(line169)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> [] +<a name="(line170)"></a> declprim <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line171)"></a> <font color=Red>[</font> Element <font color=Cyan>(</font>ElementDecl t EMPTY<font color=Cyan>)</font>+<a name="(line172)"></a> <font color=Cyan>,</font> AttList <font color=Cyan>(</font>AttListDecl t <font color=Red>[</font>AttDef <font color=Magenta>"value"</font> StringType REQUIRED<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>+<a name="(line173)"></a> declstring <font color=Red>=</font>+<a name="(line174)"></a> Element <font color=Cyan>(</font>ElementDecl <font color=Magenta>"string"</font> <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line175)"></a> grab <font color=Cyan>(</font>Constr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> hts<font color=Cyan>)</font> <font color=Red>=</font> hts+<a name="(line176)"></a>+<a name="(line177)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> Bool <font color=Red>-></font> <font color=Cyan>(</font>a<font color=Red>-></font>a<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>a<font color=Red>-></font>a<font color=Cyan>)</font>+<a name="(line178)"></a><a name="b"></a>b <font color=Cyan>?</font> f <font color=Red>|</font> b <font color=Red>=</font> f+<a name="(line179)"></a> <font color=Red>|</font> not b <font color=Red>=</font> id <a name="(line180)"></a>-<a name="(line181)"></a><a name="flatConstr"></a>flatConstr <font color=Red>::</font> Constr <font color=Red>-></font> ShowS-<a name="(line182)"></a>flatConstr <font color=Cyan>(</font>Constr s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>-<a name="(line183)"></a> <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>></font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line184)"></a> <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font> <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line185)"></a>-<a name="(line186)"></a><a name="outerHtExpr"></a>outerHtExpr <font color=Red>::</font> HType <font color=Red>-></font> CP-<a name="(line187)"></a>outerHtExpr <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr ht Query-<a name="(line188)"></a>outerHtExpr <font color=Cyan>(</font>List ht<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr ht Star-<a name="(line189)"></a>outerHtExpr <font color=Cyan>(</font>Defined s fv cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line190)"></a> Choice <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-></font>TagName <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> None<font color=Cyan>)</font> cs<font color=Cyan>)</font> None-<a name="(line191)"></a>outerHtExpr ht <font color=Red>=</font> innerHtExpr ht None-<a name="(line192)"></a>-<a name="(line193)"></a><a name="innerHtExpr"></a>innerHtExpr <font color=Red>::</font> HType <font color=Red>-></font> Modifier <font color=Red>-></font> CP-<a name="(line194)"></a>innerHtExpr <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> m <font color=Red>=</font> TagName t m-<a name="(line195)"></a>innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> m <font color=Red>=</font> Seq <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-></font> innerHtExpr c None<font color=Cyan>)</font> hts<font color=Cyan>)</font> m-<a name="(line196)"></a>innerHtExpr ht<font color=Red>@</font><font color=Cyan>(</font>Defined s hts cs<font color=Cyan>)</font> m <font color=Red>=</font> <font color=Blue>-- CPPE (showHType ht "") (outerHtExpr ht)</font>-<a name="(line197)"></a> TagName <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font> showHType ht <font color=Magenta>";"</font><font color=Cyan>)</font> m-<a name="(line198)"></a> <font color=Blue>-- ***HACK!!!***</font>-<a name="(line199)"></a>innerHtExpr ht m <font color=Red>=</font> TagName <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> m+<a name="(line181)"></a><a name="showHType"></a><font color=Blue>-- Flatten an HType to a String suitable for an XML tagname.</font>+<a name="(line182)"></a>showHType <font color=Red>::</font> HType <font color=Red>-></font> ShowS+<a name="(line183)"></a>showHType <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"maybe-"</font> <font color=Cyan>.</font> showHType ht+<a name="(line184)"></a>showHType <font color=Cyan>(</font>List ht<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"list-"</font> <font color=Cyan>.</font> showHType ht+<a name="(line185)"></a>showHType <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"tuple"</font> <font color=Cyan>.</font> shows <font color=Cyan>(</font>length hts<font color=Cyan>)</font>+<a name="(line186)"></a> <font color=Cyan>.</font> showChar <font color=Magenta>'-'</font>+<a name="(line187)"></a> <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>+<a name="(line188)"></a> <font color=Cyan>(</font>map showHType hts<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line189)"></a>showHType <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font> showString t+<a name="(line190)"></a>showHType String <font color=Red>=</font> showString <font color=Magenta>"string"</font>+<a name="(line191)"></a>showHType <font color=Cyan>(</font>Defined s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>+<a name="(line192)"></a> <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>></font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line193)"></a> <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>+<a name="(line194)"></a> <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line195)"></a>+<a name="(line196)"></a><a name="flatConstr"></a>flatConstr <font color=Red>::</font> Constr <font color=Red>-></font> ShowS+<a name="(line197)"></a>flatConstr <font color=Cyan>(</font>Constr s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>+<a name="(line198)"></a> <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>></font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line199)"></a> <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font> <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line200)"></a>-<a name="(line201)"></a><a name="constrHtExpr"></a>constrHtExpr <font color=Red>::</font> Constr <font color=Red>-></font> CP-<a name="(line202)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv []<font color=Cyan>)</font> <font color=Red>=</font> TagName <font color=Magenta>"EMPTY"</font> None <font color=Blue>-- ***HACK!!!***</font>-<a name="(line203)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> None-<a name="(line204)"></a>-<a name="(line205)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line201)"></a><a name="outerHtExpr"></a>outerHtExpr <font color=Red>::</font> HType <font color=Red>-></font> CP+<a name="(line202)"></a>outerHtExpr <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr ht Query+<a name="(line203)"></a>outerHtExpr <font color=Cyan>(</font>List ht<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr ht Star+<a name="(line204)"></a>outerHtExpr <font color=Cyan>(</font>Defined s fv cs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line205)"></a> Choice <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-></font>TagName <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> None<font color=Cyan>)</font> cs<font color=Cyan>)</font> None+<a name="(line206)"></a>outerHtExpr ht <font color=Red>=</font> innerHtExpr ht None+<a name="(line207)"></a>+<a name="(line208)"></a><a name="innerHtExpr"></a>innerHtExpr <font color=Red>::</font> HType <font color=Red>-></font> Modifier <font color=Red>-></font> CP+<a name="(line209)"></a>innerHtExpr <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> m <font color=Red>=</font> TagName t m+<a name="(line210)"></a>innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> m <font color=Red>=</font> Seq <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-></font> innerHtExpr c None<font color=Cyan>)</font> hts<font color=Cyan>)</font> m+<a name="(line211)"></a>innerHtExpr ht<font color=Red>@</font><font color=Cyan>(</font>Defined s hts cs<font color=Cyan>)</font> m <font color=Red>=</font> <font color=Blue>-- CPPE (showHType ht "") (outerHtExpr ht)</font>+<a name="(line212)"></a> TagName <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font> showHType ht <font color=Magenta>";"</font><font color=Cyan>)</font> m+<a name="(line213)"></a> <font color=Blue>-- ***HACK!!!***</font>+<a name="(line214)"></a>innerHtExpr ht m <font color=Red>=</font> TagName <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> m+<a name="(line215)"></a>+<a name="(line216)"></a><a name="constrHtExpr"></a>constrHtExpr <font color=Red>::</font> Constr <font color=Red>-></font> CP+<a name="(line217)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv []<font color=Cyan>)</font> <font color=Red>=</font> TagName <font color=Magenta>"EMPTY"</font> None <font color=Blue>-- ***HACK!!!***</font>+<a name="(line218)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> None+<a name="(line219)"></a>+<a name="(line220)"></a><font color=Blue>------------------------------------------------------------------------</font> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/Types.html view
@@ -137,15 +137,15 @@ <a name="(line135)"></a><a name="XMLDecl"></a><font color=Green><u>data</u></font> XMLDecl <font color=Red>=</font> XMLDecl VersionInfo <font color=Cyan>(</font>Maybe EncodingDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Maybe SDDecl<font color=Cyan>)</font> <a name="(line136)"></a> <font color=Green><u>deriving</u></font> Eq <a name="(line137)"></a><a name="Misc"></a><font color=Green><u>data</u></font> Misc <font color=Red>=</font> Comment Comment-<a name="(line138)"></a> <font color=Red>|</font> PI ProcessingInstruction +<a name="(line138)"></a> <font color=Red>|</font> PI ProcessingInstruction <a name="(line139)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line140)"></a> +<a name="(line140)"></a> <a name="(line141)"></a><a name="ProcessingInstruction"></a><font color=Green><u>type</u></font> ProcessingInstruction <font color=Red>=</font> <font color=Cyan>(</font>PITarget<font color=Cyan>,</font>String<font color=Cyan>)</font> <a name="(line142)"></a>-<a name="(line143)"></a><a name="SDDecl"></a><font color=Green><u>type</u></font> SDDecl <font color=Red>=</font> Bool -<a name="(line144)"></a><a name="VersionInfo"></a><font color=Green><u>type</u></font> VersionInfo <font color=Red>=</font> String -<a name="(line145)"></a><a name="Comment"></a><font color=Green><u>type</u></font> Comment <font color=Red>=</font> String -<a name="(line146)"></a><a name="PITarget"></a><font color=Green><u>type</u></font> PITarget <font color=Red>=</font> String +<a name="(line143)"></a><a name="SDDecl"></a><font color=Green><u>type</u></font> SDDecl <font color=Red>=</font> Bool+<a name="(line144)"></a><a name="VersionInfo"></a><font color=Green><u>type</u></font> VersionInfo <font color=Red>=</font> String+<a name="(line145)"></a><a name="Comment"></a><font color=Green><u>type</u></font> Comment <font color=Red>=</font> String+<a name="(line146)"></a><a name="PITarget"></a><font color=Green><u>type</u></font> PITarget <font color=Red>=</font> String <a name="(line147)"></a> <a name="(line148)"></a><a name="DocTypeDecl"></a><font color=Green><u>data</u></font> DocTypeDecl <font color=Red>=</font> DTD Name <font color=Cyan>(</font>Maybe ExternalID<font color=Cyan>)</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq <a name="(line149)"></a><a name="MarkupDecl"></a><font color=Green><u>data</u></font> MarkupDecl <font color=Red>=</font> Element ElementDecl@@ -161,134 +161,136 @@ <a name="(line159)"></a> <font color=Green><u>deriving</u></font> Eq <a name="(line160)"></a> <a name="(line161)"></a><a name="Element"></a><font color=Green><u>data</u></font> Element i <font color=Red>=</font> Elem Name <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line162)"></a> <font color=Blue>-- intermediate for parsing</font>+<a name="(line162)"></a> <font color=Blue>-- intermediate for parsing</font> <a name="(line163)"></a><a name="ElemTag"></a><font color=Green><u>data</u></font> ElemTag <font color=Red>=</font> ElemTag Name <font color=Red>[</font>Attribute<font color=Red>]</font> <a name="(line164)"></a><a name="Attribute"></a><font color=Green><u>type</u></font> Attribute <font color=Red>=</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font> AttValue<font color=Cyan>)</font> <a name="(line165)"></a><a name="Content"></a><font color=Green><u>data</u></font> Content i <font color=Red>=</font> CElem <font color=Cyan>(</font>Element i<font color=Cyan>)</font> i <a name="(line166)"></a> <font color=Red>|</font> CString Bool CharData i-<a name="(line167)"></a> <font color=Blue>-- ^ bool is whether whitespace is significant</font>+<a name="(line167)"></a> <font color=Blue>-- ^ bool is whether whitespace is significant</font> <a name="(line168)"></a> <font color=Red>|</font> CRef Reference i <a name="(line169)"></a> <font color=Red>|</font> CMisc Misc i <a name="(line170)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line171)"></a><a name="info"></a>info <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i-<a name="(line172)"></a>info <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i-<a name="(line173)"></a>info <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i-<a name="(line174)"></a>info <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i-<a name="(line175)"></a>-<a name="(line176)"></a><font color=Green><u>instance</u></font> Functor Document <font color=Green><u>where</u></font>-<a name="(line177)"></a> fmap f <font color=Cyan>(</font>Document p st e ms<font color=Cyan>)</font> <font color=Red>=</font> Document p st <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> ms-<a name="(line178)"></a><font color=Green><u>instance</u></font> Functor Element <font color=Green><u>where</u></font>-<a name="(line179)"></a> fmap f <font color=Cyan>(</font>Elem t <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font> Elem t <font color=Green><u>as</u></font> <font color=Cyan>(</font>map <font color=Cyan>(</font>fmap f<font color=Cyan>)</font> cs<font color=Cyan>)</font>-<a name="(line180)"></a><font color=Green><u>instance</u></font> Functor Content <font color=Green><u>where</u></font>-<a name="(line181)"></a> fmap f <font color=Cyan>(</font>CElem e i<font color=Cyan>)</font> <font color=Red>=</font> CElem <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> <font color=Cyan>(</font>f i<font color=Cyan>)</font>-<a name="(line182)"></a> fmap f <font color=Cyan>(</font>CString b s i<font color=Cyan>)</font> <font color=Red>=</font> CString b s <font color=Cyan>(</font>f i<font color=Cyan>)</font>-<a name="(line183)"></a> fmap f <font color=Cyan>(</font>CRef r i<font color=Cyan>)</font> <font color=Red>=</font> CRef r <font color=Cyan>(</font>f i<font color=Cyan>)</font>-<a name="(line184)"></a> fmap f <font color=Cyan>(</font>CMisc m i<font color=Cyan>)</font> <font color=Red>=</font> CMisc m <font color=Cyan>(</font>f i<font color=Cyan>)</font>-<a name="(line185)"></a>-<a name="(line186)"></a><a name="ElementDecl"></a><font color=Green><u>data</u></font> ElementDecl <font color=Red>=</font> ElementDecl Name ContentSpec <font color=Green><u>deriving</u></font> Eq-<a name="(line187)"></a><a name="ContentSpec"></a><font color=Green><u>data</u></font> ContentSpec <font color=Red>=</font> EMPTY-<a name="(line188)"></a> <font color=Red>|</font> ANY-<a name="(line189)"></a> <font color=Red>|</font> Mixed Mixed-<a name="(line190)"></a> <font color=Red>|</font> ContentSpec CP-<a name="(line191)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line192)"></a><a name="CP"></a><font color=Blue>-- FIXME: What is TagName here? Seems to be in disagreement with XML spec.</font>-<a name="(line193)"></a><a name="CP"></a><font color=Green><u>data</u></font> CP <font color=Red>=</font> TagName Name Modifier-<a name="(line194)"></a> <font color=Red>|</font> Choice <font color=Red>[</font>CP<font color=Red>]</font> Modifier-<a name="(line195)"></a> <font color=Red>|</font> Seq <font color=Red>[</font>CP<font color=Red>]</font> Modifier -<a name="(line196)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line197)"></a><a name="Modifier"></a><font color=Green><u>data</u></font> Modifier <font color=Red>=</font> None <font color=Blue>-- ^ Just One</font>-<a name="(line198)"></a> <font color=Red>|</font> Query <font color=Blue>-- ^ Zero Or One</font>-<a name="(line199)"></a> <font color=Red>|</font> Star <font color=Blue>-- ^ Zero Or More</font>-<a name="(line200)"></a> <font color=Red>|</font> Plus <font color=Blue>-- ^ One Or More </font>-<a name="(line201)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line202)"></a><a name="Mixed"></a><font color=Green><u>data</u></font> Mixed <font color=Red>=</font> PCDATA-<a name="(line203)"></a> <font color=Red>|</font> PCDATAplus <font color=Red>[</font>Name<font color=Red>]</font> -<a name="(line204)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line205)"></a><a name="AttListDecl"></a><font color=Green><u>data</u></font> AttListDecl <font color=Red>=</font> AttListDecl Name <font color=Red>[</font>AttDef<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line206)"></a><a name="AttDef"></a><font color=Green><u>data</u></font> AttDef <font color=Red>=</font> AttDef Name AttType DefaultDecl <font color=Green><u>deriving</u></font> Eq-<a name="(line207)"></a><a name="AttType"></a><font color=Green><u>data</u></font> AttType <font color=Red>=</font> StringType-<a name="(line208)"></a> <font color=Red>|</font> TokenizedType TokenizedType-<a name="(line209)"></a> <font color=Red>|</font> EnumeratedType EnumeratedType -<a name="(line210)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line211)"></a><a name="TokenizedType"></a><font color=Green><u>data</u></font> TokenizedType <font color=Red>=</font> ID-<a name="(line212)"></a> <font color=Red>|</font> IDREF-<a name="(line213)"></a> <font color=Red>|</font> IDREFS-<a name="(line214)"></a> <font color=Red>|</font> ENTITY-<a name="(line215)"></a> <font color=Red>|</font> ENTITIES-<a name="(line216)"></a> <font color=Red>|</font> NMTOKEN-<a name="(line217)"></a> <font color=Red>|</font> NMTOKENS -<a name="(line218)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line219)"></a><a name="EnumeratedType"></a><font color=Green><u>data</u></font> EnumeratedType <font color=Red>=</font> NotationType NotationType-<a name="(line220)"></a> <font color=Red>|</font> Enumeration Enumeration -<a name="(line221)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line222)"></a><a name="NotationType"></a><font color=Green><u>type</u></font> NotationType <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Blue>-- nonempty list</font>-<a name="(line223)"></a><a name="Enumeration"></a><font color=Green><u>type</u></font> Enumeration <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font> <font color=Blue>-- nonempty list</font>-<a name="(line224)"></a><a name="DefaultDecl"></a><font color=Green><u>data</u></font> DefaultDecl <font color=Red>=</font> REQUIRED-<a name="(line225)"></a> <font color=Red>|</font> IMPLIED-<a name="(line226)"></a> <font color=Red>|</font> DefaultTo AttValue <font color=Cyan>(</font>Maybe FIXED<font color=Cyan>)</font> -<a name="(line227)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line228)"></a><a name="FIXED"></a><font color=Green><u>data</u></font> FIXED <font color=Red>=</font> FIXED <font color=Green><u>deriving</u></font> Eq-<a name="(line229)"></a>-<a name="(line230)"></a><a name="ConditionalSect"></a><font color=Green><u>data</u></font> ConditionalSect <font color=Red>=</font> IncludeSect IncludeSect-<a name="(line231)"></a> <font color=Red>|</font> IgnoreSect IgnoreSect -<a name="(line232)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line233)"></a><a name="IncludeSect"></a><font color=Green><u>type</u></font> IncludeSect <font color=Red>=</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font>-<a name="(line234)"></a><a name="IgnoreSect"></a><font color=Green><u>type</u></font> IgnoreSect <font color=Red>=</font> <font color=Red>[</font>IgnoreSectContents<font color=Red>]</font>-<a name="(line235)"></a><a name="Ignore"></a><font color=Green><u>data</u></font> Ignore <font color=Red>=</font> Ignore <font color=Green><u>deriving</u></font> Eq-<a name="(line236)"></a><a name="IgnoreSectContents"></a><font color=Green><u>data</u></font> IgnoreSectContents <font color=Red>=</font> IgnoreSectContents Ignore <font color=Red>[</font><font color=Cyan>(</font>IgnoreSectContents<font color=Cyan>,</font>Ignore<font color=Cyan>)</font><font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line237)"></a>-<a name="(line238)"></a><a name="Reference"></a><font color=Green><u>data</u></font> Reference <font color=Red>=</font> RefEntity EntityRef-<a name="(line239)"></a> <font color=Red>|</font> RefChar CharRef -<a name="(line240)"></a> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line241)"></a><a name="EntityRef"></a><font color=Green><u>type</u></font> EntityRef <font color=Red>=</font> Name -<a name="(line242)"></a><a name="CharRef"></a><font color=Green><u>type</u></font> CharRef <font color=Red>=</font> Int-<a name="(line243)"></a><a name="PEReference"></a><font color=Green><u>type</u></font> PEReference <font color=Red>=</font> Name -<a name="(line244)"></a>-<a name="(line245)"></a><a name="EntityDecl"></a><font color=Green><u>data</u></font> EntityDecl <font color=Red>=</font> EntityGEDecl GEDecl-<a name="(line246)"></a> <font color=Red>|</font> EntityPEDecl PEDecl -<a name="(line247)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line248)"></a><a name="GEDecl"></a><font color=Green><u>data</u></font> GEDecl <font color=Red>=</font> GEDecl Name EntityDef <font color=Green><u>deriving</u></font> Eq-<a name="(line249)"></a><a name="PEDecl"></a><font color=Green><u>data</u></font> PEDecl <font color=Red>=</font> PEDecl Name PEDef <font color=Green><u>deriving</u></font> Eq-<a name="(line250)"></a><a name="EntityDef"></a><font color=Green><u>data</u></font> EntityDef <font color=Red>=</font> DefEntityValue EntityValue -<a name="(line251)"></a> <font color=Red>|</font> DefExternalID ExternalID <font color=Cyan>(</font>Maybe NDataDecl<font color=Cyan>)</font> -<a name="(line252)"></a> <font color=Green><u>deriving</u></font> Eq-<a name="(line253)"></a><a name="PEDef"></a><font color=Green><u>data</u></font> PEDef <font color=Red>=</font> PEDefEntityValue EntityValue-<a name="(line254)"></a> <font color=Red>|</font> PEDefExternalID ExternalID <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line255)"></a><a name="ExternalID"></a><font color=Green><u>data</u></font> ExternalID <font color=Red>=</font> SYSTEM SystemLiteral-<a name="(line256)"></a> <font color=Red>|</font> PUBLIC PubidLiteral SystemLiteral <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line257)"></a><a name="NDataDecl"></a><font color=Green><u>newtype</u></font> NDataDecl <font color=Red>=</font> NDATA Name <font color=Green><u>deriving</u></font> Eq-<a name="(line258)"></a>-<a name="(line259)"></a><a name="TextDecl"></a><font color=Green><u>data</u></font> TextDecl <font color=Red>=</font> TextDecl <font color=Cyan>(</font>Maybe VersionInfo<font color=Cyan>)</font> EncodingDecl <font color=Green><u>deriving</u></font> Eq-<a name="(line260)"></a><a name="ExtParsedEnt"></a><font color=Green><u>data</u></font> ExtParsedEnt i <font color=Red>=</font> ExtParsedEnt <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Content i<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line261)"></a><a name="ExtPE"></a><font color=Green><u>data</u></font> ExtPE <font color=Red>=</font> ExtPE <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line262)"></a>-<a name="(line263)"></a><a name="NotationDecl"></a><font color=Green><u>data</u></font> NotationDecl <font color=Red>=</font> NOTATION Name <font color=Cyan>(</font>Either ExternalID PublicID<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line264)"></a><a name="PublicID"></a><font color=Green><u>newtype</u></font> PublicID <font color=Red>=</font> PUBLICID PubidLiteral <font color=Green><u>deriving</u></font> Eq-<a name="(line265)"></a><a name="EncodingDecl"></a><font color=Green><u>newtype</u></font> EncodingDecl <font color=Red>=</font> EncodingDecl String <font color=Green><u>deriving</u></font> Eq-<a name="(line266)"></a>-<a name="(line267)"></a><a name="Name"></a><font color=Green><u>type</u></font> Name <font color=Red>=</font> String <font color=Blue>-- non-empty string</font>-<a name="(line268)"></a><a name="Names"></a><font color=Green><u>type</u></font> Names <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Blue>-- non-empty list</font>-<a name="(line269)"></a><a name="NmToken"></a><font color=Green><u>type</u></font> NmToken <font color=Red>=</font> String <font color=Blue>-- non-empty string</font>-<a name="(line270)"></a><a name="NmTokens"></a><font color=Green><u>type</u></font> NmTokens <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font> <font color=Blue>-- non-empty list</font>-<a name="(line271)"></a>-<a name="(line272)"></a><a name="AttValue"></a><font color=Green><u>data</u></font> AttValue <font color=Red>=</font> AttValue <font color=Red>[</font>Either String Reference<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line273)"></a><font color=Green><u>instance</u></font> Show AttValue <font color=Green><u>where</u></font>-<a name="(line274)"></a> show <font color=Cyan>(</font>AttValue v<font color=Cyan>)</font> <font color=Red>=</font> concatMap decode v-<a name="(line275)"></a> <font color=Green><u>where</u></font>-<a name="(line276)"></a> decode <font color=Cyan>(</font>Left v<font color=Cyan>)</font> <font color=Red>=</font> v-<a name="(line277)"></a> decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity ent<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&"</font><font color=Cyan>++</font>ent<font color=Cyan>++</font><font color=Magenta>";"</font>-<a name="(line278)"></a> decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar cref<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&"</font><font color=Cyan>++</font>show cref<font color=Cyan>++</font><font color=Magenta>";"</font>-<a name="(line279)"></a>-<a name="(line280)"></a><a name="EntityValue"></a><font color=Green><u>data</u></font> EntityValue <font color=Red>=</font> EntityValue <font color=Red>[</font>EV<font color=Red>]</font> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line281)"></a><a name="EV"></a><font color=Green><u>data</u></font> EV <font color=Red>=</font> EVString String-<a name="(line282)"></a> <font color=Blue>-- -- | EVPERef PEReference</font>-<a name="(line283)"></a> <font color=Red>|</font> EVRef Reference <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line284)"></a><a name="PubidLiteral"></a><font color=Green><u>newtype</u></font> PubidLiteral <font color=Red>=</font> PubidLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line285)"></a><a name="SystemLiteral"></a><font color=Green><u>newtype</u></font> SystemLiteral <font color=Red>=</font> SystemLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line286)"></a><a name="CharData"></a><font color=Green><u>type</u></font> CharData <font color=Red>=</font> String -<a name="(line287)"></a><a name="CDSect"></a><font color=Green><u>type</u></font> CDSect <font color=Red>=</font> CharData-<a name="(line288)"></a>-<a name="(line289)"></a><font color=Green><u>instance</u></font> Eq ElemTag <font color=Green><u>where</u></font>-<a name="(line290)"></a> <font color=Cyan>(</font>ElemTag n <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>ElemTag m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> n<font color=Cyan>==</font>m+<a name="(line171)"></a>+<a name="(line172)"></a><a name="info"></a>info <font color=Red>::</font> Content t <font color=Red>-></font> t+<a name="(line173)"></a>info <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i+<a name="(line174)"></a>info <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i+<a name="(line175)"></a>info <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i+<a name="(line176)"></a>info <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i+<a name="(line177)"></a>+<a name="(line178)"></a><font color=Green><u>instance</u></font> Functor Document <font color=Green><u>where</u></font>+<a name="(line179)"></a> fmap f <font color=Cyan>(</font>Document p st e ms<font color=Cyan>)</font> <font color=Red>=</font> Document p st <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> ms+<a name="(line180)"></a><font color=Green><u>instance</u></font> Functor Element <font color=Green><u>where</u></font>+<a name="(line181)"></a> fmap f <font color=Cyan>(</font>Elem t <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font> Elem t <font color=Green><u>as</u></font> <font color=Cyan>(</font>map <font color=Cyan>(</font>fmap f<font color=Cyan>)</font> cs<font color=Cyan>)</font>+<a name="(line182)"></a><font color=Green><u>instance</u></font> Functor Content <font color=Green><u>where</u></font>+<a name="(line183)"></a> fmap f <font color=Cyan>(</font>CElem e i<font color=Cyan>)</font> <font color=Red>=</font> CElem <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> <font color=Cyan>(</font>f i<font color=Cyan>)</font>+<a name="(line184)"></a> fmap f <font color=Cyan>(</font>CString b s i<font color=Cyan>)</font> <font color=Red>=</font> CString b s <font color=Cyan>(</font>f i<font color=Cyan>)</font>+<a name="(line185)"></a> fmap f <font color=Cyan>(</font>CRef r i<font color=Cyan>)</font> <font color=Red>=</font> CRef r <font color=Cyan>(</font>f i<font color=Cyan>)</font>+<a name="(line186)"></a> fmap f <font color=Cyan>(</font>CMisc m i<font color=Cyan>)</font> <font color=Red>=</font> CMisc m <font color=Cyan>(</font>f i<font color=Cyan>)</font>+<a name="(line187)"></a>+<a name="(line188)"></a><a name="ElementDecl"></a><font color=Green><u>data</u></font> ElementDecl <font color=Red>=</font> ElementDecl Name ContentSpec <font color=Green><u>deriving</u></font> Eq+<a name="(line189)"></a><a name="ContentSpec"></a><font color=Green><u>data</u></font> ContentSpec <font color=Red>=</font> EMPTY+<a name="(line190)"></a> <font color=Red>|</font> ANY+<a name="(line191)"></a> <font color=Red>|</font> Mixed Mixed+<a name="(line192)"></a> <font color=Red>|</font> ContentSpec CP+<a name="(line193)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line194)"></a><a name="CP"></a><font color=Blue>-- FIXME: What is TagName here? Seems to be in disagreement with XML spec.</font>+<a name="(line195)"></a><a name="CP"></a><font color=Green><u>data</u></font> CP <font color=Red>=</font> TagName Name Modifier+<a name="(line196)"></a> <font color=Red>|</font> Choice <font color=Red>[</font>CP<font color=Red>]</font> Modifier+<a name="(line197)"></a> <font color=Red>|</font> Seq <font color=Red>[</font>CP<font color=Red>]</font> Modifier+<a name="(line198)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line199)"></a><a name="Modifier"></a><font color=Green><u>data</u></font> Modifier <font color=Red>=</font> None <font color=Blue>-- ^ Just One</font>+<a name="(line200)"></a> <font color=Red>|</font> Query <font color=Blue>-- ^ Zero Or One</font>+<a name="(line201)"></a> <font color=Red>|</font> Star <font color=Blue>-- ^ Zero Or More</font>+<a name="(line202)"></a> <font color=Red>|</font> Plus <font color=Blue>-- ^ One Or More</font>+<a name="(line203)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line204)"></a><a name="Mixed"></a><font color=Green><u>data</u></font> Mixed <font color=Red>=</font> PCDATA+<a name="(line205)"></a> <font color=Red>|</font> PCDATAplus <font color=Red>[</font>Name<font color=Red>]</font>+<a name="(line206)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line207)"></a><a name="AttListDecl"></a><font color=Green><u>data</u></font> AttListDecl <font color=Red>=</font> AttListDecl Name <font color=Red>[</font>AttDef<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line208)"></a><a name="AttDef"></a><font color=Green><u>data</u></font> AttDef <font color=Red>=</font> AttDef Name AttType DefaultDecl <font color=Green><u>deriving</u></font> Eq+<a name="(line209)"></a><a name="AttType"></a><font color=Green><u>data</u></font> AttType <font color=Red>=</font> StringType+<a name="(line210)"></a> <font color=Red>|</font> TokenizedType TokenizedType+<a name="(line211)"></a> <font color=Red>|</font> EnumeratedType EnumeratedType+<a name="(line212)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line213)"></a><a name="TokenizedType"></a><font color=Green><u>data</u></font> TokenizedType <font color=Red>=</font> ID+<a name="(line214)"></a> <font color=Red>|</font> IDREF+<a name="(line215)"></a> <font color=Red>|</font> IDREFS+<a name="(line216)"></a> <font color=Red>|</font> ENTITY+<a name="(line217)"></a> <font color=Red>|</font> ENTITIES+<a name="(line218)"></a> <font color=Red>|</font> NMTOKEN+<a name="(line219)"></a> <font color=Red>|</font> NMTOKENS+<a name="(line220)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line221)"></a><a name="EnumeratedType"></a><font color=Green><u>data</u></font> EnumeratedType <font color=Red>=</font> NotationType NotationType+<a name="(line222)"></a> <font color=Red>|</font> Enumeration Enumeration+<a name="(line223)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line224)"></a><a name="NotationType"></a><font color=Green><u>type</u></font> NotationType <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Blue>-- nonempty list</font>+<a name="(line225)"></a><a name="Enumeration"></a><font color=Green><u>type</u></font> Enumeration <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font> <font color=Blue>-- nonempty list</font>+<a name="(line226)"></a><a name="DefaultDecl"></a><font color=Green><u>data</u></font> DefaultDecl <font color=Red>=</font> REQUIRED+<a name="(line227)"></a> <font color=Red>|</font> IMPLIED+<a name="(line228)"></a> <font color=Red>|</font> DefaultTo AttValue <font color=Cyan>(</font>Maybe FIXED<font color=Cyan>)</font>+<a name="(line229)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line230)"></a><a name="FIXED"></a><font color=Green><u>data</u></font> FIXED <font color=Red>=</font> FIXED <font color=Green><u>deriving</u></font> Eq+<a name="(line231)"></a>+<a name="(line232)"></a><a name="ConditionalSect"></a><font color=Green><u>data</u></font> ConditionalSect <font color=Red>=</font> IncludeSect IncludeSect+<a name="(line233)"></a> <font color=Red>|</font> IgnoreSect IgnoreSect+<a name="(line234)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line235)"></a><a name="IncludeSect"></a><font color=Green><u>type</u></font> IncludeSect <font color=Red>=</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font>+<a name="(line236)"></a><a name="IgnoreSect"></a><font color=Green><u>type</u></font> IgnoreSect <font color=Red>=</font> <font color=Red>[</font>IgnoreSectContents<font color=Red>]</font>+<a name="(line237)"></a><a name="Ignore"></a><font color=Green><u>data</u></font> Ignore <font color=Red>=</font> Ignore <font color=Green><u>deriving</u></font> Eq+<a name="(line238)"></a><a name="IgnoreSectContents"></a><font color=Green><u>data</u></font> IgnoreSectContents <font color=Red>=</font> IgnoreSectContents Ignore <font color=Red>[</font><font color=Cyan>(</font>IgnoreSectContents<font color=Cyan>,</font>Ignore<font color=Cyan>)</font><font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line239)"></a>+<a name="(line240)"></a><a name="Reference"></a><font color=Green><u>data</u></font> Reference <font color=Red>=</font> RefEntity EntityRef+<a name="(line241)"></a> <font color=Red>|</font> RefChar CharRef+<a name="(line242)"></a> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line243)"></a><a name="EntityRef"></a><font color=Green><u>type</u></font> EntityRef <font color=Red>=</font> Name+<a name="(line244)"></a><a name="CharRef"></a><font color=Green><u>type</u></font> CharRef <font color=Red>=</font> Int+<a name="(line245)"></a><a name="PEReference"></a><font color=Green><u>type</u></font> PEReference <font color=Red>=</font> Name+<a name="(line246)"></a>+<a name="(line247)"></a><a name="EntityDecl"></a><font color=Green><u>data</u></font> EntityDecl <font color=Red>=</font> EntityGEDecl GEDecl+<a name="(line248)"></a> <font color=Red>|</font> EntityPEDecl PEDecl+<a name="(line249)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line250)"></a><a name="GEDecl"></a><font color=Green><u>data</u></font> GEDecl <font color=Red>=</font> GEDecl Name EntityDef <font color=Green><u>deriving</u></font> Eq+<a name="(line251)"></a><a name="PEDecl"></a><font color=Green><u>data</u></font> PEDecl <font color=Red>=</font> PEDecl Name PEDef <font color=Green><u>deriving</u></font> Eq+<a name="(line252)"></a><a name="EntityDef"></a><font color=Green><u>data</u></font> EntityDef <font color=Red>=</font> DefEntityValue EntityValue+<a name="(line253)"></a> <font color=Red>|</font> DefExternalID ExternalID <font color=Cyan>(</font>Maybe NDataDecl<font color=Cyan>)</font>+<a name="(line254)"></a> <font color=Green><u>deriving</u></font> Eq+<a name="(line255)"></a><a name="PEDef"></a><font color=Green><u>data</u></font> PEDef <font color=Red>=</font> PEDefEntityValue EntityValue+<a name="(line256)"></a> <font color=Red>|</font> PEDefExternalID ExternalID <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line257)"></a><a name="ExternalID"></a><font color=Green><u>data</u></font> ExternalID <font color=Red>=</font> SYSTEM SystemLiteral+<a name="(line258)"></a> <font color=Red>|</font> PUBLIC PubidLiteral SystemLiteral <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line259)"></a><a name="NDataDecl"></a><font color=Green><u>newtype</u></font> NDataDecl <font color=Red>=</font> NDATA Name <font color=Green><u>deriving</u></font> Eq+<a name="(line260)"></a>+<a name="(line261)"></a><a name="TextDecl"></a><font color=Green><u>data</u></font> TextDecl <font color=Red>=</font> TextDecl <font color=Cyan>(</font>Maybe VersionInfo<font color=Cyan>)</font> EncodingDecl <font color=Green><u>deriving</u></font> Eq+<a name="(line262)"></a><a name="ExtParsedEnt"></a><font color=Green><u>data</u></font> ExtParsedEnt i <font color=Red>=</font> ExtParsedEnt <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Content i<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line263)"></a><a name="ExtPE"></a><font color=Green><u>data</u></font> ExtPE <font color=Red>=</font> ExtPE <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line264)"></a>+<a name="(line265)"></a><a name="NotationDecl"></a><font color=Green><u>data</u></font> NotationDecl <font color=Red>=</font> NOTATION Name <font color=Cyan>(</font>Either ExternalID PublicID<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line266)"></a><a name="PublicID"></a><font color=Green><u>newtype</u></font> PublicID <font color=Red>=</font> PUBLICID PubidLiteral <font color=Green><u>deriving</u></font> Eq+<a name="(line267)"></a><a name="EncodingDecl"></a><font color=Green><u>newtype</u></font> EncodingDecl <font color=Red>=</font> EncodingDecl String <font color=Green><u>deriving</u></font> Eq+<a name="(line268)"></a>+<a name="(line269)"></a><a name="Name"></a><font color=Green><u>type</u></font> Name <font color=Red>=</font> String <font color=Blue>-- non-empty string</font>+<a name="(line270)"></a><a name="Names"></a><font color=Green><u>type</u></font> Names <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Blue>-- non-empty list</font>+<a name="(line271)"></a><a name="NmToken"></a><font color=Green><u>type</u></font> NmToken <font color=Red>=</font> String <font color=Blue>-- non-empty string</font>+<a name="(line272)"></a><a name="NmTokens"></a><font color=Green><u>type</u></font> NmTokens <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font> <font color=Blue>-- non-empty list</font>+<a name="(line273)"></a>+<a name="(line274)"></a><a name="AttValue"></a><font color=Green><u>data</u></font> AttValue <font color=Red>=</font> AttValue <font color=Red>[</font>Either String Reference<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line275)"></a><font color=Green><u>instance</u></font> Show AttValue <font color=Green><u>where</u></font>+<a name="(line276)"></a> show <font color=Cyan>(</font>AttValue v<font color=Cyan>)</font> <font color=Red>=</font> concatMap decode v+<a name="(line277)"></a> <font color=Green><u>where</u></font>+<a name="(line278)"></a> decode <font color=Cyan>(</font>Left w<font color=Cyan>)</font> <font color=Red>=</font> w+<a name="(line279)"></a> decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity ent<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&"</font><font color=Cyan>++</font>ent<font color=Cyan>++</font><font color=Magenta>";"</font>+<a name="(line280)"></a> decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar cref<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&"</font><font color=Cyan>++</font>show cref<font color=Cyan>++</font><font color=Magenta>";"</font>+<a name="(line281)"></a>+<a name="(line282)"></a><a name="EntityValue"></a><font color=Green><u>data</u></font> EntityValue <font color=Red>=</font> EntityValue <font color=Red>[</font>EV<font color=Red>]</font> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line283)"></a><a name="EV"></a><font color=Green><u>data</u></font> EV <font color=Red>=</font> EVString String+<a name="(line284)"></a> <font color=Blue>-- -- | EVPERef PEReference</font>+<a name="(line285)"></a> <font color=Red>|</font> EVRef Reference <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line286)"></a><a name="PubidLiteral"></a><font color=Green><u>newtype</u></font> PubidLiteral <font color=Red>=</font> PubidLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line287)"></a><a name="SystemLiteral"></a><font color=Green><u>newtype</u></font> SystemLiteral <font color=Red>=</font> SystemLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line288)"></a><a name="CharData"></a><font color=Green><u>type</u></font> CharData <font color=Red>=</font> String+<a name="(line289)"></a><a name="CDSect"></a><font color=Green><u>type</u></font> CDSect <font color=Red>=</font> CharData+<a name="(line290)"></a>+<a name="(line291)"></a><font color=Green><u>instance</u></font> Eq ElemTag <font color=Green><u>where</u></font>+<a name="(line292)"></a> <font color=Cyan>(</font>ElemTag n <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>ElemTag m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> n<font color=Cyan>==</font>m </pre> </html>
docs/HaXml/src/Text/XML/HaXml/Validate.html view
@@ -222,49 +222,55 @@ <a name="(line220)"></a> <a name="(line221)"></a> choice elem ns cps <font color=Red>=</font> <font color=Blue>-- return only those parses that don't give any errors</font> <a name="(line222)"></a> <font color=Red>[</font> rem <font color=Red>|</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>rem<font color=Cyan>)</font> <font color=Red><-</font> map <font color=Cyan>(</font><font color=Red>\</font>cp<font color=Red>-></font> checkCP elem <font color=Cyan>(</font>definite cp<font color=Cyan>)</font> ns<font color=Cyan>)</font> cps <font color=Red>]</font>-<a name="(line223)"></a> <font color=Green><u>where</u></font> definite <font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font> <font color=Red>=</font> TagName n None-<a name="(line224)"></a> definite <font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> <font color=Red>=</font> Choice cps None-<a name="(line225)"></a> definite <font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font> <font color=Red>=</font> Seq cps None-<a name="(line226)"></a> definite <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> <font color=Red>=</font> TagName n Plus-<a name="(line227)"></a> definite <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> <font color=Red>=</font> Choice cps Plus-<a name="(line228)"></a> definite <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> <font color=Red>=</font> Seq cps Plus-<a name="(line229)"></a> definite x <font color=Red>=</font> x-<a name="(line230)"></a> sequence elem ns cps <font color=Red>=</font> <font color=Blue>-- accumulate errors down the sequence</font>-<a name="(line231)"></a> foldl <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>es<font color=Cyan>,</font>ns<font color=Cyan>)</font> cp<font color=Red>-></font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>es'<font color=Cyan>,</font>ns'<font color=Cyan>)</font> <font color=Red>=</font> checkCP elem cp ns-<a name="(line232)"></a> <font color=Green><u>in</u></font> <font color=Cyan>(</font>es<font color=Cyan>++</font>es'<font color=Cyan>,</font> ns'<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line233)"></a> <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font> cps-<a name="(line234)"></a>-<a name="(line235)"></a> checkIDs elem <font color=Red>=</font>-<a name="(line236)"></a> <font color=Green><u>let</u></font> celem <font color=Red>=</font> CElem elem undefined-<a name="(line237)"></a> showAttr a <font color=Red>=</font> iffind a literal none-<a name="(line238)"></a> idElems <font color=Red>=</font> concatMap <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>name<font color=Cyan>,</font>at<font color=Cyan>)</font><font color=Red>-></font> multi <font color=Cyan>(</font>showAttr at <font color=Cyan>`o`</font> tag name<font color=Cyan>)</font>-<a name="(line239)"></a> celem<font color=Cyan>)</font>-<a name="(line240)"></a> <font color=Cyan>(</font>ids dtd<font color=Cyan>)</font>-<a name="(line241)"></a> badIds <font color=Red>=</font> duplicates <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red>-></font>s<font color=Cyan>)</font> idElems<font color=Cyan>)</font>-<a name="(line242)"></a> <font color=Green><u>in</u></font> not <font color=Cyan>(</font>null badIds<font color=Cyan>)</font> <font color=Cyan>`gives`</font>-<a name="(line243)"></a> <font color=Cyan>(</font><font color=Magenta>"These attribute values of type ID are not unique: "</font>-<a name="(line244)"></a> <font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> badIds<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"."</font><font color=Cyan>)</font>-<a name="(line245)"></a>-<a name="(line246)"></a>-<a name="(line247)"></a><a name="cpError"></a>cpError <font color=Red>::</font> Name <font color=Red>-></font> CP <font color=Red>-></font> <font color=Red>[</font>String<font color=Red>]</font>-<a name="(line248)"></a>cpError elem cp <font color=Red>=</font>-<a name="(line249)"></a> <font color=Red>[</font><font color=Magenta>"Element <"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"> should contain "</font><font color=Cyan>++</font>display cp<font color=Cyan>++</font><font color=Magenta>" but does not."</font><font color=Red>]</font>-<a name="(line250)"></a>+<a name="(line223)"></a> <font color=Cyan>++</font> <font color=Red>[</font> ns <font color=Red>|</font> all possEmpty cps <font color=Red>]</font>+<a name="(line224)"></a> <font color=Green><u>where</u></font> definite <font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font> <font color=Red>=</font> TagName n None+<a name="(line225)"></a> definite <font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> <font color=Red>=</font> Choice cps None+<a name="(line226)"></a> definite <font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font> <font color=Red>=</font> Seq cps None+<a name="(line227)"></a> definite <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> <font color=Red>=</font> TagName n Plus+<a name="(line228)"></a> definite <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> <font color=Red>=</font> Choice cps Plus+<a name="(line229)"></a> definite <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> <font color=Red>=</font> Seq cps Plus+<a name="(line230)"></a> definite x <font color=Red>=</font> x+<a name="(line231)"></a> possEmpty <font color=Cyan>(</font>TagName <font color=Green><u>_</u></font> mod<font color=Cyan>)</font> <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>+<a name="(line232)"></a> possEmpty <font color=Cyan>(</font>Choice cps None<font color=Cyan>)</font> <font color=Red>=</font> all possEmpty cps+<a name="(line233)"></a> possEmpty <font color=Cyan>(</font>Choice <font color=Green><u>_</u></font> mod<font color=Cyan>)</font> <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>+<a name="(line234)"></a> possEmpty <font color=Cyan>(</font>Seq cps None<font color=Cyan>)</font> <font color=Red>=</font> all possEmpty cps+<a name="(line235)"></a> possEmpty <font color=Cyan>(</font>Seq <font color=Green><u>_</u></font> mod<font color=Cyan>)</font> <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>+<a name="(line236)"></a> sequence elem ns cps <font color=Red>=</font> <font color=Blue>-- accumulate errors down the sequence</font>+<a name="(line237)"></a> foldl <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>es<font color=Cyan>,</font>ns<font color=Cyan>)</font> cp<font color=Red>-></font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>es'<font color=Cyan>,</font>ns'<font color=Cyan>)</font> <font color=Red>=</font> checkCP elem cp ns+<a name="(line238)"></a> <font color=Green><u>in</u></font> <font color=Cyan>(</font>es<font color=Cyan>++</font>es'<font color=Cyan>,</font> ns'<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line239)"></a> <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font> cps+<a name="(line240)"></a>+<a name="(line241)"></a> checkIDs elem <font color=Red>=</font>+<a name="(line242)"></a> <font color=Green><u>let</u></font> celem <font color=Red>=</font> CElem elem undefined+<a name="(line243)"></a> showAttr a <font color=Red>=</font> iffind a literal none+<a name="(line244)"></a> idElems <font color=Red>=</font> concatMap <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>name<font color=Cyan>,</font>at<font color=Cyan>)</font><font color=Red>-></font> multi <font color=Cyan>(</font>showAttr at <font color=Cyan>`o`</font> tag name<font color=Cyan>)</font>+<a name="(line245)"></a> celem<font color=Cyan>)</font>+<a name="(line246)"></a> <font color=Cyan>(</font>ids dtd<font color=Cyan>)</font>+<a name="(line247)"></a> badIds <font color=Red>=</font> duplicates <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red>-></font>s<font color=Cyan>)</font> idElems<font color=Cyan>)</font>+<a name="(line248)"></a> <font color=Green><u>in</u></font> not <font color=Cyan>(</font>null badIds<font color=Cyan>)</font> <font color=Cyan>`gives`</font>+<a name="(line249)"></a> <font color=Cyan>(</font><font color=Magenta>"These attribute values of type ID are not unique: "</font>+<a name="(line250)"></a> <font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> badIds<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"."</font><font color=Cyan>)</font> <a name="(line251)"></a>-<a name="(line252)"></a><a name="display"></a>display <font color=Red>::</font> CP <font color=Red>-></font> String-<a name="(line253)"></a>display <font color=Cyan>(</font>TagName name mod<font color=Cyan>)</font> <font color=Red>=</font> name <font color=Cyan>++</font> modifier mod-<a name="(line254)"></a>display <font color=Cyan>(</font>Choice cps mod<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line255)"></a> <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod-<a name="(line256)"></a>display <font color=Cyan>(</font>Seq cps mod<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line257)"></a> <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod-<a name="(line258)"></a>-<a name="(line259)"></a><a name="modifier"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-></font> String-<a name="(line260)"></a>modifier None <font color=Red>=</font> <font color=Magenta>""</font>-<a name="(line261)"></a>modifier Query <font color=Red>=</font> <font color=Magenta>"?"</font>-<a name="(line262)"></a>modifier Star <font color=Red>=</font> <font color=Magenta>"*"</font>-<a name="(line263)"></a>modifier Plus <font color=Red>=</font> <font color=Magenta>"+"</font>+<a name="(line252)"></a>+<a name="(line253)"></a><a name="cpError"></a>cpError <font color=Red>::</font> Name <font color=Red>-></font> CP <font color=Red>-></font> <font color=Red>[</font>String<font color=Red>]</font>+<a name="(line254)"></a>cpError elem cp <font color=Red>=</font>+<a name="(line255)"></a> <font color=Red>[</font><font color=Magenta>"Element <"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"> should contain "</font><font color=Cyan>++</font>display cp<font color=Cyan>++</font><font color=Magenta>" but does not."</font><font color=Red>]</font>+<a name="(line256)"></a>+<a name="(line257)"></a>+<a name="(line258)"></a><a name="display"></a>display <font color=Red>::</font> CP <font color=Red>-></font> String+<a name="(line259)"></a>display <font color=Cyan>(</font>TagName name mod<font color=Cyan>)</font> <font color=Red>=</font> name <font color=Cyan>++</font> modifier mod+<a name="(line260)"></a>display <font color=Cyan>(</font>Choice cps mod<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line261)"></a> <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod+<a name="(line262)"></a>display <font color=Cyan>(</font>Seq cps mod<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line263)"></a> <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod <a name="(line264)"></a>-<a name="(line265)"></a><a name="duplicates"></a>duplicates <font color=Red>::</font> Eq a <font color=Red>=></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font>-<a name="(line266)"></a>duplicates xs <font color=Red>=</font> xs <font color=Cyan>\\</font> <font color=Cyan>(</font>nub xs<font color=Cyan>)</font>+<a name="(line265)"></a><a name="modifier"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-></font> String+<a name="(line266)"></a>modifier None <font color=Red>=</font> <font color=Magenta>""</font>+<a name="(line267)"></a>modifier Query <font color=Red>=</font> <font color=Magenta>"?"</font>+<a name="(line268)"></a>modifier Star <font color=Red>=</font> <font color=Magenta>"*"</font>+<a name="(line269)"></a>modifier Plus <font color=Red>=</font> <font color=Magenta>"+"</font>+<a name="(line270)"></a>+<a name="(line271)"></a><a name="duplicates"></a>duplicates <font color=Red>::</font> Eq a <font color=Red>=></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font>+<a name="(line272)"></a>duplicates xs <font color=Red>=</font> xs <font color=Cyan>\\</font> <font color=Cyan>(</font>nub xs<font color=Cyan>)</font> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/XmlContent.html view
@@ -1,640 +1,683 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html>-<pre><a name="(line1)"></a><font color=Blue>{-# OPTIONS -fglasgow-exts #-}</font>-<a name="(line2)"></a><font color=Blue>-- | The class 'XmlContent' is a kind of replacement for Read and Show:</font>-<a name="(line3)"></a><font color=Blue>-- it provides conversions between a generic XML tree representation</font>-<a name="(line4)"></a><font color=Blue>-- and your own more specialised typeful Haskell data trees.</font>-<a name="(line5)"></a><font color=Blue>--</font>-<a name="(line6)"></a><font color=Blue>-- If you are starting with a set of Haskell datatypes, use DrIFT to</font>-<a name="(line7)"></a><font color=Blue>-- derive instances of this class for you:</font>-<a name="(line8)"></a><font color=Blue>-- http:\/\/repetae.net\/john\/computer\/haskell\/DrIFT</font>-<a name="(line9)"></a><font color=Blue>-- If you are starting with an XML DTD, use HaXml's tool DtdToHaskell</font>-<a name="(line10)"></a><font color=Blue>-- to generate both the Haskell types and the corresponding instances.</font>-<a name="(line11)"></a><font color=Blue>--</font>-<a name="(line12)"></a><font color=Blue>-- This unified class interface replaces two previous (somewhat similar)</font>-<a name="(line13)"></a><font color=Blue>-- classes: Haskell2Xml and Xml2Haskell. There was no real reason to have</font>-<a name="(line14)"></a><font color=Blue>-- separate classes depending on how you originally defined your datatypes.</font>-<a name="(line15)"></a>-<a name="(line16)"></a><font color=Blue>-- The methods 'toContents' and 'parseContents' convert a value to and from</font>-<a name="(line17)"></a><font color=Blue>-- a generic internal representation of an XML document /without/ a DTD.</font>-<a name="(line18)"></a><font color=Blue>-- The functions 'toXml' and 'fromXml' convert a value to and from a generic</font>-<a name="(line19)"></a><font color=Blue>-- internal representation of an XML document /including/ a DTD.</font>-<a name="(line20)"></a><font color=Blue>-- The functions 'readXml' and 'showXml' convert to and from Strings.</font>-<a name="(line21)"></a><font color=Blue>-- The functions 'fReadXml' and 'fWriteXml' do the conversion to and from</font>-<a name="(line22)"></a><font color=Blue>-- the given filenames.</font>-<a name="(line23)"></a><font color=Blue>-- The functions 'hGetXml' and 'hPutXml' do the conversion to and from</font>-<a name="(line24)"></a><font color=Blue>-- the given file handles.</font>-<a name="(line25)"></a><font color=Blue>-- (See the type signatures.)</font>-<a name="(line26)"></a><font color=Blue>-- </font>-<a name="(line27)"></a>-<a name="(line28)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent-<a name="(line29)"></a> <font color=Cyan>(</font> <font color=Blue>-- * Re-export the relevant set of generic XML document type definitions</font>-<a name="(line30)"></a> Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line31)"></a> <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line32)"></a> <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line33)"></a> <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line34)"></a> <font color=Cyan>,</font> Attribute<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line35)"></a> <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line36)"></a> <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line37)"></a> <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line38)"></a> <font color=Blue>-- * The enabling classes, that define parsing\/unparsing between Haskell</font>-<a name="(line39)"></a> <font color=Blue>-- datatypes and a generic XML representation.</font>-<a name="(line40)"></a> <font color=Cyan>,</font> XmlContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line41)"></a> <font color=Cyan>,</font> XmlAttributes<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line42)"></a> <font color=Cyan>,</font> XmlAttrType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line43)"></a> <font color=Blue>-- ** Auxiliaries for writing parsers in the XmlContent class</font>-<a name="(line44)"></a> <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly-<a name="(line45)"></a> <font color=Cyan>,</font> XMLParser-<a name="(line46)"></a> <font color=Cyan>,</font> content<font color=Cyan>,</font> posnElement<font color=Cyan>,</font> element<font color=Cyan>,</font> interior<font color=Cyan>,</font> inElement<font color=Cyan>,</font> text<font color=Cyan>,</font> attributes-<a name="(line47)"></a> <font color=Cyan>,</font> posnElementWith<font color=Cyan>,</font> elementWith<font color=Cyan>,</font> inElementWith-<a name="(line48)"></a> <font color=Cyan>,</font> choice<font color=Cyan>,</font> definite <font color=Blue>-- ???</font>-<a name="(line49)"></a> <font color=Blue>-- ** Auxiliaries for generating in the XmlContent class</font>-<a name="(line50)"></a> <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemC<font color=Cyan>,</font> mkAttr-<a name="(line51)"></a> <font color=Cyan>,</font> toText<font color=Cyan>,</font> toCData-<a name="(line52)"></a> <font color=Blue>-- ** Auxiliaries for the attribute-related classes</font>-<a name="(line53)"></a> <font color=Cyan>,</font> maybeToAttr<font color=Cyan>,</font> defaultToAttr-<a name="(line54)"></a> <font color=Cyan>,</font> definiteA<font color=Cyan>,</font> defaultA<font color=Cyan>,</font> possibleA<font color=Cyan>,</font> fromAttrToStr<font color=Cyan>,</font> toAttrFrStr-<a name="(line55)"></a> <font color=Cyan>,</font> Defaultable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line56)"></a> <font color=Cyan>,</font> str2attr<font color=Cyan>,</font> attr2str<font color=Cyan>,</font> attval-<a name="(line57)"></a> <font color=Cyan>,</font> catMaybes <font color=Blue>-- re-exported from Maybe</font>-<a name="(line58)"></a> <font color=Blue>-- * Whole-document conversion functions</font>-<a name="(line59)"></a> <font color=Cyan>,</font> toXml<font color=Cyan>,</font> fromXml-<a name="(line60)"></a> <font color=Cyan>,</font> readXml<font color=Cyan>,</font> showXml<font color=Cyan>,</font> fpsShowXml-<a name="(line61)"></a> <font color=Cyan>,</font> fReadXml<font color=Cyan>,</font> fWriteXml<font color=Cyan>,</font> fpsWriteXml-<a name="(line62)"></a> <font color=Cyan>,</font> hGetXml<font color=Cyan>,</font> hPutXml<font color=Cyan>,</font> fpsHPutXml-<a name="(line63)"></a> <font color=Blue>-- * Explicit representation of Haskell datatype information</font>-<a name="(line64)"></a> <font color=Blue>-- (for conversion to a DTD)</font>-<a name="(line65)"></a> <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping-<a name="(line66)"></a> <font color=Blue>-- * Types useful for some content models</font>-<a name="(line67)"></a> <font color=Cyan>,</font> List1<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line68)"></a> <font color=Cyan>,</font> ANYContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line69)"></a> <font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line70)"></a>-<a name="(line71)"></a><font color=Green><u>import</u></font> IO-<a name="(line72)"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>catMaybes<font color=Cyan>)</font>-<a name="(line73)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>chr<font color=Cyan>,</font> ord<font color=Cyan>,</font> isSpace<font color=Cyan>)</font>-<a name="(line74)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>,</font> isPrefixOf<font color=Cyan>,</font> isSuffixOf<font color=Cyan>,</font> partition<font color=Cyan>)</font>-<a name="(line75)"></a>-<a name="(line76)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Cyan>(</font>render<font color=Cyan>)</font>-<a name="(line77)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Green><u>as</u></font> PP-<a name="(line78)"></a>-<a name="(line79)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types-<a name="(line80)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping-<a name="(line81)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn <font color=Cyan>(</font>Posn<font color=Cyan>,</font> posInNewCxt<font color=Cyan>)</font>-<a name="(line82)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Cyan>(</font>document<font color=Cyan>)</font>-<a name="(line83)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse <font color=Cyan>(</font>xmlParse<font color=Cyan>,</font> fst3<font color=Cyan>)</font>-<a name="(line84)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim <font color=Cyan>(</font>Verbatim<font color=Cyan>(</font>verbatim<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line85)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ByteStringPP <font color=Green><u>as</u></font> FPS <font color=Cyan>(</font>document<font color=Cyan>)</font>-<a name="(line86)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Green><u>as</u></font> FPS-<a name="(line87)"></a>-<a name="(line88)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly-<a name="(line89)"></a>-<a name="(line90)"></a><font color=Blue>-- #define DEBUG</font>-<a name="(line91)"></a>-<a name="(line92)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>-<a name="(line93)"></a><font color=Green><u>import</u></font> Debug<font color=Cyan>.</font>Trace<font color=Cyan>(</font>trace<font color=Cyan>)</font>-<a name="(line94)"></a><a name="debug"></a>debug <font color=Red>::</font> a <font color=Red>-></font> String <font color=Red>-></font> a-<a name="(line95)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v-<a name="(line96)"></a><font color=Magenta><em>#else</em></font>-<a name="(line97)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> v-<a name="(line98)"></a><font color=Magenta><em>#endif</em></font>-<a name="(line99)"></a>-<a name="(line100)"></a>-<a name="(line101)"></a><a name="attval"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line102)"></a><font color=Blue>-- | Read a single attribute called "value".</font>-<a name="(line103)"></a>attval <font color=Red>::</font> <font color=Cyan>(</font>Read a<font color=Cyan>)</font> <font color=Red>=></font> Element i <font color=Red>-></font> a-<a name="(line104)"></a>attval <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> <font color=Red>=</font> read <font color=Cyan>(</font>show v<font color=Cyan>)</font>-<a name="(line105)"></a>-<a name="(line106)"></a><a name="mkAttr"></a><font color=Blue>-- | Generate a single attribute.</font>-<a name="(line107)"></a>mkAttr <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> Attribute-<a name="(line108)"></a>mkAttr n v <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font> AttValue <font color=Red>[</font>Left v<font color=Red>]</font><font color=Cyan>)</font>-<a name="(line109)"></a>-<a name="(line110)"></a><a name="mkElem"></a><font color=Blue>-- | Generate an element with no attributes, named for its HType.</font>-<a name="(line111)"></a>mkElem <font color=Red>::</font> XmlContent a <font color=Red>=></font> a <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-></font> Content ()-<a name="(line112)"></a>mkElem x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem <font color=Cyan>(</font>showHType <font color=Cyan>(</font>toHType x<font color=Cyan>)</font> <font color=Magenta>""</font><font color=Cyan>)</font> [] cs<font color=Cyan>)</font> ()-<a name="(line113)"></a>-<a name="(line114)"></a><a name="mkElemC"></a><font color=Blue>-- | Generate an element with no attributes, named directly.</font>-<a name="(line115)"></a>mkElemC <font color=Red>::</font> String <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-></font> Content ()-<a name="(line116)"></a>mkElemC x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem x [] cs<font color=Cyan>)</font> ()-<a name="(line117)"></a>-<a name="(line118)"></a><a name="toText"></a><font color=Blue>-- | Turn a simple string into XML text. </font>-<a name="(line119)"></a>toText <font color=Red>::</font> String <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font>-<a name="(line120)"></a>toText s <font color=Red>=</font> <font color=Red>[</font>CString False s ()<font color=Red>]</font>-<a name="(line121)"></a>-<a name="(line122)"></a><a name="toCData"></a><font color=Blue>-- | Turn a string into an XML CDATA section.</font>-<a name="(line123)"></a><font color=Blue>-- (i.e. special characters like '&' are preserved without interpretation.)</font>-<a name="(line124)"></a>toCData <font color=Red>::</font> String <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font>-<a name="(line125)"></a>toCData s <font color=Red>=</font> <font color=Red>[</font>CString True s ()<font color=Red>]</font>-<a name="(line126)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line127)"></a>-<a name="(line128)"></a> <font color=Blue>-- probably want to write DTD separately from value, and have</font>-<a name="(line129)"></a> <font color=Blue>-- easy ways to combine DTD + value into a document, or write</font>-<a name="(line130)"></a> <font color=Blue>-- them to separate files.</font>-<a name="(line131)"></a>-<a name="(line132)"></a><a name="fReadXml"></a><font color=Blue>-- | Read an XML document from a file and convert it to a fully-typed</font>-<a name="(line133)"></a><font color=Blue>-- Haskell value.</font>-<a name="(line134)"></a>fReadXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> FilePath <font color=Red>-></font> IO a-<a name="(line135)"></a>fReadXml fp <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line136)"></a> f <font color=Red><-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdin-<a name="(line137)"></a> <font color=Green><u>else</u></font> openFile fp ReadMode <font color=Cyan>)</font>-<a name="(line138)"></a> x <font color=Red><-</font> hGetContents f -<a name="(line139)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse fp x-<a name="(line140)"></a> y' <font color=Red>=</font> CElem y <font color=Cyan>(</font>posInNewCxt fp Nothing<font color=Cyan>)</font>-<a name="(line141)"></a> either fail return <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents <font color=Red>[</font>y'<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line142)"></a>-<a name="(line143)"></a><a name="fWriteXml"></a><font color=Blue>-- | Write a fully-typed Haskell value to the given file as an XML</font>-<a name="(line144)"></a><font color=Blue>-- document.</font>-<a name="(line145)"></a>fWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> FilePath <font color=Red>-></font> a <font color=Red>-></font> IO ()-<a name="(line146)"></a>fWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line147)"></a> f <font color=Red><-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout-<a name="(line148)"></a> <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>-<a name="(line149)"></a> hPutXml f False x-<a name="(line150)"></a> hClose f-<a name="(line151)"></a>-<a name="(line152)"></a><a name="fpsWriteXml"></a><font color=Blue>-- | Write any Haskell value to the given file as an XML document,</font>-<a name="(line153)"></a><font color=Blue>-- using the FastPackedString interface (output will not be prettified).</font>-<a name="(line154)"></a>fpsWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> FilePath <font color=Red>-></font> a <font color=Red>-></font> IO ()-<a name="(line155)"></a>fpsWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line156)"></a> f <font color=Red><-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout-<a name="(line157)"></a> <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>-<a name="(line158)"></a> fpsHPutXml f False x-<a name="(line159)"></a> hClose f-<a name="(line160)"></a>-<a name="(line161)"></a><a name="readXml"></a><font color=Blue>-- | Read a fully-typed XML document from a string.</font>-<a name="(line162)"></a>readXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> String <font color=Red>-></font> Either String a-<a name="(line163)"></a>readXml s <font color=Red>=</font>-<a name="(line164)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"string input"</font> s <font color=Green><u>in</u></font>-<a name="(line165)"></a> fst <font color=Cyan>(</font>runParser parseContents-<a name="(line166)"></a> <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"string input"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>-<a name="(line167)"></a>-<a name="(line168)"></a><a name="showXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>-<a name="(line169)"></a>showXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> String-<a name="(line170)"></a>showXml dtd x <font color=Red>=</font>-<a name="(line171)"></a> <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>-<a name="(line172)"></a> <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-></font> <font color=Cyan>(</font>render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x-<a name="(line173)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Magenta>""</font>-<a name="(line174)"></a>-<a name="(line175)"></a><a name="fpsShowXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a ByteString (without DTD).</font>-<a name="(line176)"></a>fpsShowXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> FPS<font color=Cyan>.</font>ByteString-<a name="(line177)"></a>fpsShowXml dtd x <font color=Red>=</font>-<a name="(line178)"></a> <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>-<a name="(line179)"></a> <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-></font> <font color=Cyan>(</font>FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x-<a name="(line180)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> FPS<font color=Cyan>.</font>empty-<a name="(line181)"></a>-<a name="(line182)"></a>-<a name="(line183)"></a><a name="toXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>-<a name="(line184)"></a>toXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> Document ()-<a name="(line185)"></a>toXml dtd value <font color=Red>=</font>-<a name="(line186)"></a> <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>-<a name="(line187)"></a> Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line188)"></a> [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>-<a name="(line189)"></a> emptyST-<a name="(line190)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>-<a name="(line191)"></a> <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs-<a name="(line192)"></a> <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs-<a name="(line193)"></a> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> e <font color=Cyan>)</font>-<a name="(line194)"></a> []-<a name="(line195)"></a>-<a name="(line196)"></a><a name="fromXml"></a><font color=Blue>-- | Read a Haskell value from an XML document, ignoring the DTD and</font>-<a name="(line197)"></a><font color=Blue>-- using the Haskell result type to determine how to parse it.</font>-<a name="(line198)"></a>fromXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Document Posn <font color=Red>-></font> Either String a-<a name="(line199)"></a>fromXml <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>-<a name="(line200)"></a> <font color=Red>|</font> <font color=Magenta>"tuple"</font> <font color=Cyan>`isPrefixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>-<a name="(line201)"></a> <font color=Red>|</font> <font color=Magenta>"-XML"</font> <font color=Cyan>`isSuffixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>-<a name="(line202)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents-<a name="(line203)"></a> <font color=Red>[</font>CElem e <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"document"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>-<a name="(line204)"></a>-<a name="(line205)"></a>-<a name="(line206)"></a><a name="hGetXml"></a><font color=Blue>-- | Read a fully-typed XML document from a file handle.</font>-<a name="(line207)"></a>hGetXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Handle <font color=Red>-></font> IO a-<a name="(line208)"></a>hGetXml h <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line209)"></a> x <font color=Red><-</font> hGetContents h -<a name="(line210)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"file handle"</font> x-<a name="(line211)"></a> either fail return-<a name="(line212)"></a> <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents-<a name="(line213)"></a> <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"file handle"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line214)"></a>-<a name="(line215)"></a><a name="hPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle.</font>-<a name="(line216)"></a>hPutXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Handle <font color=Red>-></font> Bool <font color=Red>-></font> a <font color=Red>-></font> IO ()-<a name="(line217)"></a>hPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line218)"></a> <font color=Cyan>(</font>hPutStrLn h <font color=Cyan>.</font> render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x-<a name="(line219)"></a>-<a name="(line220)"></a><a name="fpsHPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle, using the</font>-<a name="(line221)"></a><font color=Blue>-- FastPackedString interface (output will not be prettified).</font>-<a name="(line222)"></a>fpsHPutXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Handle <font color=Red>-></font> Bool <font color=Red>-></font> a <font color=Red>-></font> IO ()-<a name="(line223)"></a>fpsHPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line224)"></a> <font color=Cyan>(</font>FPS<font color=Cyan>.</font>hPut h <font color=Cyan>.</font> FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x-<a name="(line225)"></a>-<a name="(line226)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line227)"></a>-<a name="(line228)"></a><a name="XMLParser"></a><font color=Blue>-- | We need a parsing monad for reading generic XML Content into specific</font>-<a name="(line229)"></a><a name="XMLParser"></a><font color=Blue>-- datatypes. This is a specialisation of the Text.ParserCombinators.Poly</font>-<a name="(line230)"></a><a name="XMLParser"></a><font color=Blue>-- ones, where the input token type is fixed as XML Content.</font>-<a name="(line231)"></a><a name="XMLParser"></a><font color=Green><u>type</u></font> XMLParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font> a-<a name="(line232)"></a>-<a name="(line233)"></a>-<a name="(line234)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line235)"></a><font color=Blue>-- Some useful parsing combinators</font>-<a name="(line236)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line237)"></a>-<a name="(line238)"></a><a name="content"></a><font color=Blue>-- | The most primitive combinator for XMLParser - get one content item.</font>-<a name="(line239)"></a>content <font color=Red>::</font> String <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>-<a name="(line240)"></a>content word <font color=Red>=</font> next <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>" when expecting "</font><font color=Cyan>++</font>word<font color=Cyan>)</font>-<a name="(line241)"></a>-<a name="(line242)"></a><a name="posnElementWith"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>-<a name="(line243)"></a><font color=Blue>-- tags, using the given matching function. </font>-<a name="(line244)"></a><font color=Blue>-- (Skips over comments and whitespace, rejects text and refs.</font>-<a name="(line245)"></a><font color=Blue>-- Also returns position of element.)</font>-<a name="(line246)"></a>posnElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>String<font color=Red>-></font>Bool<font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>String<font color=Red>]</font>-<a name="(line247)"></a> <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>-<a name="(line248)"></a>posnElementWith match tags <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line249)"></a> <font color=Cyan>{</font> c <font color=Red><-</font> content <font color=Cyan>(</font>formatted tags<font color=Cyan>)</font>-<a name="(line250)"></a> <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>-<a name="(line251)"></a> CElem e<font color=Red>@</font><font color=Cyan>(</font>Elem t <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos-<a name="(line252)"></a> <font color=Red>|</font> any <font color=Cyan>(</font>match t<font color=Cyan>)</font> tags <font color=Red>-></font> return <font color=Cyan>(</font>pos<font color=Cyan>,</font> e<font color=Cyan>)</font>-<a name="(line253)"></a> <font color=Red>|</font> otherwise <font color=Red>-></font> fail <font color=Cyan>(</font><font color=Magenta>"Found a <"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>">, but expected "</font>-<a name="(line254)"></a> <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>-<a name="(line255)"></a> CString b s pos-<a name="(line256)"></a> <font color=Red>|</font> not b <font color=Cyan>&&</font> all isSpace s <font color=Red>-></font> posnElementWith match tags-<a name="(line257)"></a> <font color=Blue>-- ignore blank space</font>-<a name="(line258)"></a> <font color=Red>|</font> otherwise <font color=Red>-></font> fail <font color=Cyan>(</font><font color=Magenta>"Found text content, but expected "</font>-<a name="(line259)"></a> <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\ntext is: "</font><font color=Cyan>++</font>s-<a name="(line260)"></a> <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>-<a name="(line261)"></a> CRef r pos <font color=Red>-></font> fail <font color=Cyan>(</font><font color=Magenta>"Found reference, but expected "</font>-<a name="(line262)"></a> <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nreference is: "</font><font color=Cyan>++</font>verbatim r-<a name="(line263)"></a> <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>-<a name="(line264)"></a> CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-></font> posnElementWith match tags <font color=Blue>-- skip comments, PIs, etc.</font>-<a name="(line265)"></a> <font color=Cyan>}</font>-<a name="(line266)"></a> <font color=Green><u>where</u></font>-<a name="(line267)"></a> formatted <font color=Red>[</font>t<font color=Red>]</font> <font color=Red>=</font> <font color=Magenta>"a <"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>">"</font>-<a name="(line268)"></a> formatted tags <font color=Red>=</font> <font color=Magenta>"one of"</font><font color=Cyan>++</font> concatMap <font color=Cyan>(</font><font color=Red>\</font>t<font color=Red>-></font><font color=Magenta>" <"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>">"</font><font color=Cyan>)</font> tags-<a name="(line269)"></a>-<a name="(line270)"></a><a name="posnElement"></a><font color=Blue>-- | A specialisation of @posnElementWith (==)@.</font>-<a name="(line271)"></a>posnElement <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>-<a name="(line272)"></a>posnElement <font color=Red>=</font> posnElementWith <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>-<a name="(line273)"></a>-<a name="(line274)"></a><a name="element"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>-<a name="(line275)"></a><font color=Blue>-- tags. (Skips over comments and whitespace, rejects text and refs.)</font>-<a name="(line276)"></a>element <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>-<a name="(line277)"></a>element tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElement tags<font color=Cyan>)</font>-<a name="(line278)"></a> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>-<a name="(line279)"></a>-<a name="(line280)"></a><a name="elementWith"></a><font color=Blue>-- | Like element, only permits a more flexible match against the tagname.</font>-<a name="(line281)"></a>elementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>String<font color=Red>-></font>Bool<font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>-<a name="(line282)"></a>elementWith match tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElementWith match tags<font color=Cyan>)</font>-<a name="(line283)"></a> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>-<a name="(line284)"></a>-<a name="(line285)"></a><a name="interior"></a><font color=Blue>-- | Run an XMLParser on the contents of the given element (i.e. not on the</font>-<a name="(line286)"></a><font color=Blue>-- current monadic content sequence), checking that the contents are</font>-<a name="(line287)"></a><font color=Blue>-- exhausted, before returning the calculated value within the current</font>-<a name="(line288)"></a><font color=Blue>-- parser context.</font>-<a name="(line289)"></a>interior <font color=Red>::</font> Element Posn <font color=Red>-></font> XMLParser a <font color=Red>-></font> XMLParser a-<a name="(line290)"></a>interior <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> p <font color=Red>=</font>-<a name="(line291)"></a> <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>-<a name="(line292)"></a> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> fail msg-<a name="(line293)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> []<font color=Cyan>)</font> <font color=Red>-></font> return x-<a name="(line294)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs<font color=Red>@</font><font color=Cyan>(</font>c<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line295)"></a> <font color=Red>|</font> all onlyMisc cs <font color=Red>-></font> return x-<a name="(line296)"></a> <font color=Red>|</font> otherwise <font color=Red>-></font> fail <font color=Cyan>(</font><font color=Magenta>"Too many elements inside <"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"> at\n"</font>-<a name="(line297)"></a> <font color=Cyan>++</font>show <font color=Cyan>(</font>info c<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"\n"</font>-<a name="(line298)"></a> <font color=Cyan>++</font><font color=Magenta>"Found excess: "</font><font color=Cyan>++</font>verbatim c<font color=Cyan>)</font>-<a name="(line299)"></a> <font color=Green><u>where</u></font> onlyMisc <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line300)"></a> onlyMisc <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> all isSpace s <font color=Red>=</font> True-<a name="(line301)"></a> onlyMisc <font color=Green><u>_</u></font> <font color=Red>=</font> False-<a name="(line302)"></a>-<a name="(line303)"></a><a name="inElement"></a><font color=Blue>-- | A combination of element + interior.</font>-<a name="(line304)"></a>inElement <font color=Red>::</font> String <font color=Red>-></font> XMLParser a <font color=Red>-></font> XMLParser a-<a name="(line305)"></a>inElement tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font>tag<font color=Red>]</font><font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line306)"></a>-<a name="(line307)"></a><a name="inElementWith"></a><font color=Blue>-- | A combination of elementWith + interior.</font>-<a name="(line308)"></a>inElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>String<font color=Red>-></font>Bool<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> XMLParser a <font color=Red>-></font> XMLParser a-<a name="(line309)"></a>inElementWith match tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> elementWith match <font color=Red>[</font>tag<font color=Red>]</font>-<a name="(line310)"></a> <font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line311)"></a>-<a name="(line312)"></a><a name="attributes"></a><font color=Blue>-- | Do some parsing of the attributes of the given element</font>-<a name="(line313)"></a>attributes <font color=Red>::</font> XmlAttributes a <font color=Red>=></font> Element Posn <font color=Red>-></font> XMLParser a-<a name="(line314)"></a>attributes <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> return <font color=Cyan>(</font>fromAttrs <font color=Green><u>as</u></font><font color=Cyan>)</font>-<a name="(line315)"></a>-<a name="(line316)"></a><a name="text"></a><font color=Blue>-- | 'text' is a counterpart to 'element', parsing text content if it</font>-<a name="(line317)"></a><font color=Blue>-- exists. Adjacent text and references are coalesced.</font>-<a name="(line318)"></a>text <font color=Red>::</font> XMLParser String-<a name="(line319)"></a>text <font color=Red>=</font> text' []-<a name="(line320)"></a> <font color=Green><u>where</u></font> text' acc <font color=Red>=</font>-<a name="(line321)"></a> <font color=Green><u>do</u></font> <font color=Cyan>{</font> c <font color=Red><-</font> content <font color=Magenta>"plain text"</font>-<a name="(line322)"></a> <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>-<a name="(line323)"></a> CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font> <font color=Red>-></font> text' <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font>-<a name="(line324)"></a> CRef <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>-></font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"&#"</font><font color=Cyan>++</font>show s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font> <font color=Red><b>:</b></font>acc<font color=Cyan>)</font>-<a name="(line325)"></a> CRef <font color=Cyan>(</font>RefEntity s<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>-></font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>'&'</font><font color=Red><b>:</b></font>s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font><font color=Red><b>:</b></font>acc<font color=Cyan>)</font>-<a name="(line326)"></a> CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-></font> text' acc-<a name="(line327)"></a> CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> reparse <font color=Red>[</font>c<font color=Red>]</font> <font color=Blue>-- put it back!</font>-<a name="(line328)"></a> <font color=Cyan>;</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>-<a name="(line329)"></a> <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line330)"></a> <font color=Cyan>}</font>-<a name="(line331)"></a> <font color=Cyan>}</font>-<a name="(line332)"></a> <font color=Cyan>`onFail`</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>-<a name="(line333)"></a> <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>)</font>-<a name="(line334)"></a>-<a name="(line335)"></a>-<a name="(line336)"></a><a name="choice"></a><font color=Blue>-- | 'choice f p' means if parseContents succeeds, apply f to the result,</font>-<a name="(line337)"></a><font color=Blue>-- otherwise use the continuation parser.</font>-<a name="(line338)"></a>choice <font color=Red>::</font> XmlContent a <font color=Red>=></font> <font color=Cyan>(</font>a <font color=Red>-></font> b<font color=Cyan>)</font> <font color=Red>-></font> XMLParser b <font color=Red>-></font> XMLParser b-<a name="(line339)"></a>choice cons <font color=Cyan>(</font>P other<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line340)"></a> P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-></font> <font color=Green><u>case</u></font> runParser parseContents cs <font color=Green><u>of</u></font>-<a name="(line341)"></a> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> other cs-<a name="(line342)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>cons x<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line343)"></a>-<a name="(line344)"></a><font color=Blue>--choice cons other = fmap cons parseContents `onFail` other</font>-<a name="(line345)"></a>-<a name="(line346)"></a><a name="definite"></a><font color=Blue>-- | not sure this is needed now. 'definite p' previously ensured that</font>-<a name="(line347)"></a><font color=Blue>-- an element was definitely present. Now I think the monad might take</font>-<a name="(line348)"></a><font color=Blue>-- care of that for us.</font>-<a name="(line349)"></a>definite <font color=Red>::</font> XmlContent a <font color=Red>=></font> XMLParser a <font color=Red>-></font> String <font color=Red>-></font> String <font color=Red>-></font> XMLParser a-<a name="(line350)"></a>definite p inner tag <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-></font> <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>-<a name="(line351)"></a> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg'<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font>-<a name="(line352)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line353)"></a> <font color=Green><u>where</u></font> msg' <font color=Red>=</font> <font color=Magenta>"content error: expected "</font><font color=Cyan>++</font>inner<font color=Cyan>++</font><font color=Magenta>" inside <"</font><font color=Cyan>++</font>tag-<a name="(line354)"></a> <font color=Cyan>++</font><font color=Magenta>"> element\n"</font>-<a name="(line355)"></a>-<a name="(line356)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line357)"></a>-<a name="(line358)"></a><a name="XmlContent"></a><font color=Blue>-- | The @XmlContent@ class promises that an XML Content element can be</font>-<a name="(line359)"></a><a name="XmlContent"></a><font color=Blue>-- converted to and from a Haskell value.</font>-<a name="(line360)"></a><a name="XmlContent"></a><font color=Green><u>class</u></font> HTypeable a <font color=Red>=></font> XmlContent a <font color=Green><u>where</u></font>-<a name="(line361)"></a> <font color=Blue>-- | Convert from XML to Haskell</font>-<a name="(line362)"></a> parseContents <font color=Red>::</font> XMLParser a-<a name="(line363)"></a> <font color=Blue>-- | Convert from Haskell to XML</font>-<a name="(line364)"></a> toContents <font color=Red>::</font> a <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font>-<a name="(line365)"></a>-<a name="(line366)"></a> <font color=Blue>-- | Dummy functions (for most types): used /only/ in the Char instance</font>-<a name="(line367)"></a> <font color=Blue>-- for coercing lists of Char into String.</font>-<a name="(line368)"></a> xToChar <font color=Red>::</font> a <font color=Red>-></font> Char-<a name="(line369)"></a> xFromChar <font color=Red>::</font> Char <font color=Red>-></font> a-<a name="(line370)"></a> xToChar <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xToChar used in error"</font>-<a name="(line371)"></a> xFromChar <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xFromChar used in error"</font>-<a name="(line372)"></a>-<a name="(line373)"></a><a name="XmlAttributes"></a><font color=Blue>-- | The @XmlAttributes@ class promises that a list of XML tag attributes</font>-<a name="(line374)"></a><a name="XmlAttributes"></a><font color=Blue>-- can be converted to and from a Haskell value.</font>-<a name="(line375)"></a><a name="XmlAttributes"></a><font color=Green><u>class</u></font> XmlAttributes a <font color=Green><u>where</u></font>-<a name="(line376)"></a> fromAttrs <font color=Red>::</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> a-<a name="(line377)"></a> toAttrs <font color=Red>::</font> a <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font>-<a name="(line378)"></a><a name="XmlAttrType"></a><font color=Blue>-- | The @XmlAttrType@ class promises that an attribute taking an XML</font>-<a name="(line379)"></a><a name="XmlAttrType"></a><font color=Blue>-- enumerated type can be converted to and from a Haskell value.</font>-<a name="(line380)"></a><a name="XmlAttrType"></a><font color=Green><u>class</u></font> XmlAttrType a <font color=Green><u>where</u></font>-<a name="(line381)"></a> fromAttrToTyp <font color=Red>::</font> String <font color=Red>-></font> Attribute <font color=Red>-></font> Maybe a-<a name="(line382)"></a> toAttrFrTyp <font color=Red>::</font> String <font color=Red>-></font> a <font color=Red>-></font> Maybe Attribute-<a name="(line383)"></a>-<a name="(line384)"></a>-<a name="(line385)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line386)"></a><font color=Blue>-- Instances for all the standard basic datatypes.</font>-<a name="(line387)"></a><font color=Blue>-- These are for Haskell datatypes being derived to go to XML.</font>-<a name="(line388)"></a><font color=Blue>-- DtdToHaskell does not use these instances.</font>-<a name="(line389)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line390)"></a>-<a name="(line391)"></a><font color=Green><u>instance</u></font> XmlContent Bool <font color=Green><u>where</u></font>-<a name="(line392)"></a> toContents b <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"bool"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show b<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line393)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"bool"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line394)"></a> -<a name="(line395)"></a><font color=Green><u>instance</u></font> XmlContent Int <font color=Green><u>where</u></font>-<a name="(line396)"></a> toContents i <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"int"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line397)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"int"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line398)"></a>-<a name="(line399)"></a><font color=Green><u>instance</u></font> XmlContent Integer <font color=Green><u>where</u></font>-<a name="(line400)"></a> toContents i <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"integer"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line401)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"integer"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line402)"></a> -<a name="(line403)"></a><font color=Green><u>instance</u></font> XmlContent Float <font color=Green><u>where</u></font>-<a name="(line404)"></a> toContents i <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"float"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line405)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"float"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line406)"></a>-<a name="(line407)"></a><font color=Green><u>instance</u></font> XmlContent Double <font color=Green><u>where</u></font>-<a name="(line408)"></a> toContents i <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"double"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line409)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"double"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line410)"></a>-<a name="(line411)"></a><font color=Green><u>instance</u></font> XmlContent Char <font color=Green><u>where</u></font>-<a name="(line412)"></a> <font color=Blue>-- NOT in a string</font>-<a name="(line413)"></a> toContents c <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"char"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line414)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font><font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font>-<a name="(line415)"></a> <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"char"</font><font color=Red>]</font>-<a name="(line416)"></a> <font color=Cyan>;</font> return c-<a name="(line417)"></a> <font color=Cyan>}</font>-<a name="(line418)"></a> <font color=Blue>-- Only defined for Char and no other types:</font>-<a name="(line419)"></a> xToChar <font color=Red>=</font> id-<a name="(line420)"></a> xFromChar <font color=Red>=</font> id-<a name="(line421)"></a>-<a name="(line422)"></a><font color=Green><u>instance</u></font> XmlContent a <font color=Red>=></font> XmlContent <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>-<a name="(line423)"></a> toContents xs <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font>-<a name="(line424)"></a> <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font>-<a name="(line425)"></a> <font color=Red>[</font>mkElem <font color=Magenta>"string"</font> <font color=Red>[</font>CString True <font color=Cyan>(</font>map xToChar xs<font color=Cyan>)</font> ()<font color=Red>]</font><font color=Red>]</font>-<a name="(line426)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Red>[</font>mkElem xs <font color=Cyan>(</font>concatMap toContents xs<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line427)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs-<a name="(line428)"></a> parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>x <font color=Red>-></font>-<a name="(line429)"></a> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>-<a name="(line430)"></a> <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>-<a name="(line431)"></a> <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line432)"></a> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"string"</font> [] <font color=Red>[</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>-<a name="(line433)"></a> <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line434)"></a> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e [] xs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> <font color=Magenta>"list"</font> <font color=Cyan>`isPrefixOf`</font> e-<a name="(line435)"></a> <font color=Red>-></font> scanElements xs-<a name="(line436)"></a> <font color=Green><u>where</u></font>-<a name="(line437)"></a> <font color=Blue>-- scanElements :: [Content] -> (Either String [a],[Content])</font>-<a name="(line438)"></a> scanElements [] <font color=Red>=</font> <font color=Cyan>(</font>Right []<font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line439)"></a> scanElements es <font color=Red>=</font>-<a name="(line440)"></a> <font color=Green><u>case</u></font> runParser parseContents es <font color=Green><u>of</u></font>-<a name="(line441)"></a> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg<font color=Cyan>)</font><font color=Cyan>,</font> es'<font color=Cyan>)</font>-<a name="(line442)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-></font>-<a name="(line443)"></a> <font color=Green><u>case</u></font> scanElements es' <font color=Green><u>of</u></font>-<a name="(line444)"></a> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line445)"></a> <font color=Cyan>(</font>Right xs<font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line446)"></a> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>-<a name="(line447)"></a> <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False-<a name="(line448)"></a> <font color=Cyan>,</font><font color=Magenta>"Expected a <list-...>, but found a <"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"> at\n"</font>-<a name="(line449)"></a> <font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line450)"></a> <font color=Cyan>(</font>CRef r pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>-<a name="(line451)"></a> <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False-<a name="(line452)"></a> <font color=Cyan>,</font><font color=Magenta>"Expected a <list-...>, but found a ref "</font>-<a name="(line453)"></a> <font color=Cyan>++</font>verbatim r<font color=Cyan>++</font><font color=Magenta>" at\n"</font><font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line454)"></a> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>P p<font color=Cyan>)</font><font color=Red>-></font> p<font color=Cyan>)</font> parseContents<font color=Cyan>)</font> cs <font color=Blue>-- skip comments etc.</font>-<a name="(line455)"></a> [] <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False-<a name="(line456)"></a> <font color=Cyan>,</font><font color=Magenta>"Ran out of input XML whilst secondary parsing"</font><font color=Cyan>)</font>-<a name="(line457)"></a> <font color=Cyan>,</font> []<font color=Cyan>)</font>-<a name="(line458)"></a> <font color=Cyan>)</font>-<a name="(line459)"></a>-<a name="(line460)"></a><font color=Green><u>instance</u></font> XmlContent () <font color=Green><u>where</u></font>-<a name="(line461)"></a> toContents () <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"unit"</font> [] []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line462)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> element <font color=Red>[</font><font color=Magenta>"unit"</font><font color=Red>]</font><font color=Cyan>;</font> return () <font color=Cyan>}</font>-<a name="(line463)"></a>-<a name="(line464)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line465)"></a> toContents <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b-<a name="(line466)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line467)"></a> <font color=Cyan>{</font> a <font color=Red><-</font> parseContents-<a name="(line468)"></a> <font color=Cyan>;</font> b <font color=Red><-</font> parseContents-<a name="(line469)"></a> <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font>-<a name="(line470)"></a> <font color=Cyan>}</font>-<a name="(line471)"></a>-<a name="(line472)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line473)"></a> toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z-<a name="(line474)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line475)"></a> <font color=Cyan>{</font> a <font color=Red><-</font> parseContents-<a name="(line476)"></a> <font color=Cyan>;</font> b <font color=Red><-</font> parseContents-<a name="(line477)"></a> <font color=Cyan>;</font> c <font color=Red><-</font> parseContents-<a name="(line478)"></a> <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line479)"></a> <font color=Cyan>}</font>-<a name="(line480)"></a>-<a name="(line481)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line482)"></a> toContents m <font color=Red>=</font> <font color=Red>[</font>mkElem m <font color=Cyan>(</font>maybe [] toContents m<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line483)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line484)"></a> <font color=Cyan>{</font> e <font color=Red><-</font> elementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Red>[</font><font color=Magenta>"maybe"</font><font color=Red>]</font>-<a name="(line485)"></a> <font color=Cyan>;</font> <font color=Green><u>case</u></font> e <font color=Green><u>of</u></font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] []<font color=Cyan>)</font> <font color=Red>-></font> return Nothing-<a name="(line486)"></a> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> fmap Just <font color=Cyan>(</font>interior e parseContents<font color=Cyan>)</font>-<a name="(line487)"></a> <font color=Cyan>}</font>-<a name="(line488)"></a>-<a name="(line489)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line490)"></a> toContents v<font color=Red>@</font><font color=Cyan>(</font>Left aa<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line491)"></a> <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>0</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents aa<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line492)"></a> toContents v<font color=Red>@</font><font color=Cyan>(</font>Right ab<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line493)"></a> <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>1</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents ab<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line494)"></a> parseContents <font color=Red>=</font>-<a name="(line495)"></a> <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Left"</font> <font color=Cyan>$</font> fmap Left parseContents<font color=Cyan>)</font>-<a name="(line496)"></a> <font color=Cyan>`onFail`</font>-<a name="(line497)"></a> <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Right"</font> <font color=Cyan>$</font> fmap Right parseContents<font color=Cyan>)</font>-<a name="(line498)"></a>-<a name="(line499)"></a><font color=Blue>-- do{ e@(Elem t [] _) <- element ["Left","Right"]</font>-<a name="(line500)"></a><font color=Blue>-- ; case t of</font>-<a name="(line501)"></a><font color=Blue>-- _ | "Left" `isPrefixOf` t -> fmap Left (interior e parseContents)</font>-<a name="(line502)"></a><font color=Blue>-- | "Right" `isPrefixOf` t -> fmap Right (interior e parseContents)</font>-<a name="(line503)"></a><font color=Blue>-- }</font>-<a name="(line504)"></a>-<a name="(line505)"></a>-<a name="(line506)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line507)"></a><font color=Blue>-- Useful auxiliaries for "fromAttributes" </font>-<a name="(line508)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line509)"></a>-<a name="(line510)"></a><a name="Defaultable"></a><font color=Blue>-- | If an attribute is defaultable, then it either takes the default</font>-<a name="(line511)"></a><a name="Defaultable"></a><font color=Blue>-- value (which is omitted from the output), or a non-default value</font>-<a name="(line512)"></a><a name="Defaultable"></a><font color=Blue>-- (which obviously must be printed).</font>-<a name="(line513)"></a><a name="Defaultable"></a><font color=Green><u>data</u></font> Defaultable a <font color=Red>=</font> Default a <font color=Red>|</font> NonDefault a <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line514)"></a>-<a name="(line515)"></a><a name="searchMaybe"></a>searchMaybe <font color=Red>::</font> <font color=Cyan>(</font>a <font color=Red>-></font> Maybe b<font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> Maybe b-<a name="(line516)"></a>searchMaybe f [] <font color=Red>=</font> Nothing-<a name="(line517)"></a>searchMaybe f <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line518)"></a> <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font>-<a name="(line519)"></a> <font color=Green><u>case</u></font> fx <font color=Green><u>of</u></font>-<a name="(line520)"></a> Nothing <font color=Red>-></font> searchMaybe f xs-<a name="(line521)"></a> <font color=Cyan>(</font>Just <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> fx-<a name="(line522)"></a>-<a name="(line523)"></a><a name="maybeToAttr"></a>maybeToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>a<font color=Red>-></font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> Maybe a-<a name="(line524)"></a> <font color=Red>-></font> Maybe Attribute-<a name="(line525)"></a>maybeToAttr to n Nothing <font color=Red>=</font> Nothing-<a name="(line526)"></a>maybeToAttr to n <font color=Cyan>(</font>Just v<font color=Cyan>)</font> <font color=Red>=</font> to n v-<a name="(line527)"></a>-<a name="(line528)"></a><a name="defaultToAttr"></a>defaultToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>a<font color=Red>-></font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> Defaultable a-<a name="(line529)"></a> <font color=Red>-></font> Maybe Attribute-<a name="(line530)"></a>defaultToAttr to n <font color=Cyan>(</font>Default v<font color=Cyan>)</font> <font color=Red>=</font> Nothing-<a name="(line531)"></a>defaultToAttr to n <font color=Cyan>(</font>NonDefault v<font color=Cyan>)</font> <font color=Red>=</font> to n v-<a name="(line532)"></a>-<a name="(line533)"></a><a name="definiteA"></a>definiteA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>Attribute<font color=Red>-></font>Maybe a<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> String-<a name="(line534)"></a> <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> a-<a name="(line535)"></a>definiteA from tag at <font color=Green><u>as</u></font> <font color=Red>=</font>-<a name="(line536)"></a> <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>-<a name="(line537)"></a> Nothing <font color=Red>-></font> error <font color=Cyan>(</font><font color=Magenta>"missing attribute "</font><font color=Cyan>++</font>at<font color=Cyan>++</font><font color=Magenta>" in tag <"</font><font color=Cyan>++</font>tag<font color=Cyan>++</font><font color=Magenta>">"</font><font color=Cyan>)</font>-<a name="(line538)"></a> <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-></font> a-<a name="(line539)"></a>-<a name="(line540)"></a><a name="defaultA"></a>defaultA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>Attribute<font color=Red>-></font>Maybe a<font color=Cyan>)</font> <font color=Red>-></font> a <font color=Red>-></font> String-<a name="(line541)"></a> <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> Defaultable a-<a name="(line542)"></a>defaultA from def at <font color=Green><u>as</u></font> <font color=Red>=</font>-<a name="(line543)"></a> <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>-<a name="(line544)"></a> Nothing <font color=Red>-></font> Default def-<a name="(line545)"></a> <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-></font> NonDefault a-<a name="(line546)"></a>-<a name="(line547)"></a><a name="possibleA"></a>possibleA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>Attribute<font color=Red>-></font>Maybe a<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> Maybe a-<a name="(line548)"></a>possibleA from at <font color=Green><u>as</u></font> <font color=Red>=</font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font>-<a name="(line549)"></a>-<a name="(line550)"></a><a name="fromAttrToStr"></a>fromAttrToStr <font color=Red>::</font> String <font color=Red>-></font> Attribute <font color=Red>-></font> Maybe String-<a name="(line551)"></a>fromAttrToStr n <font color=Cyan>(</font>n0<font color=Cyan>,</font>v<font color=Cyan>)</font>-<a name="(line552)"></a> <font color=Red>|</font> n <font color=Cyan>==</font> n0 <font color=Red>=</font> Just <font color=Cyan>(</font>attr2str v<font color=Cyan>)</font>-<a name="(line553)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> Nothing-<a name="(line554)"></a>-<a name="(line555)"></a><a name="toAttrFrStr"></a>toAttrFrStr <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> Maybe Attribute-<a name="(line556)"></a>toAttrFrStr n v <font color=Red>=</font> Just <font color=Cyan>(</font>n<font color=Cyan>,</font> str2attr v<font color=Cyan>)</font>-<a name="(line557)"></a>-<a name="(line558)"></a><a name="str2attr"></a>str2attr <font color=Red>::</font> String <font color=Red>-></font> AttValue-<a name="(line559)"></a>str2attr s <font color=Red>=</font>-<a name="(line560)"></a> <font color=Green><u>let</u></font> f s <font color=Red>=</font>-<a name="(line561)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>l<font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>=</font> span <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-></font> not <font color=Cyan>(</font>elem c <font color=Magenta>"\"&<>'"</font><font color=Cyan>)</font><font color=Cyan>)</font> s-<a name="(line562)"></a> <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> null r <font color=Green><u>then</u></font> <font color=Red>[</font>Left l<font color=Red>]</font>-<a name="(line563)"></a> <font color=Green><u>else</u></font> Left l<font color=Red><b>:</b></font> Right <font color=Cyan>(</font>g <font color=Cyan>(</font>head r<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font> f <font color=Cyan>(</font>tail r<font color=Cyan>)</font>-<a name="(line564)"></a> g <font color=Magenta>'"'</font> <font color=Red>=</font> RefEntity <font color=Magenta>"quot"</font>-<a name="(line565)"></a> g <font color=Magenta>'&'</font> <font color=Red>=</font> RefEntity <font color=Magenta>"amp"</font>-<a name="(line566)"></a> g <font color=Magenta>'<'</font> <font color=Red>=</font> RefEntity <font color=Magenta>"lt"</font>-<a name="(line567)"></a> g <font color=Magenta>'>'</font> <font color=Red>=</font> RefEntity <font color=Magenta>"gt"</font>-<a name="(line568)"></a> g <font color=Magenta>'\''</font> <font color=Red>=</font> RefEntity <font color=Magenta>"apos"</font>-<a name="(line569)"></a> <font color=Green><u>in</u></font> AttValue <font color=Cyan>(</font>f s<font color=Cyan>)</font>-<a name="(line570)"></a>-<a name="(line571)"></a><a name="attr2str"></a>attr2str <font color=Red>::</font> AttValue <font color=Red>-></font> String <font color=Blue>-- really needs symbol table</font>-<a name="(line572)"></a>attr2str <font color=Cyan>(</font>AttValue xs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line573)"></a> <font color=Green><u>let</u></font> f <font color=Cyan>(</font>Left s<font color=Cyan>)</font> <font color=Red>=</font> s-<a name="(line574)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>chr i<font color=Red>]</font>-<a name="(line575)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"\""</font>-<a name="(line576)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&"</font>-<a name="(line577)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"<"</font>-<a name="(line578)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>">"</font>-<a name="(line579)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"'"</font>-<a name="(line580)"></a> f <font color=Cyan>(</font>Right <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"*"</font> <font color=Blue>-- Ooops, ST needed here.</font>-<a name="(line581)"></a> <font color=Green><u>in</u></font> concatMap f xs-<a name="(line582)"></a>-<a name="(line583)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line584)"></a><font color=Blue>-- New content-model types</font>-<a name="(line585)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line586)"></a>-<a name="(line587)"></a><font color=Blue>{--<a name="(line588)"></a>data OneOf2 a b-<a name="(line589)"></a>data OneOf3 a b c-<a name="(line590)"></a>data OneOf4 a b c d-<a name="(line591)"></a> ... etc are now defined (with instances) in module OneOfN.-<a name="(line592)"></a>-}</font>-<a name="(line593)"></a>-<a name="(line594)"></a><a name="ANYContent"></a><font color=Blue>-- | A type corresponding to XML's ANY contentspec. </font>-<a name="(line595)"></a><a name="ANYContent"></a><font color=Blue>-- It is either a list of unconverted xml 'Content' </font>-<a name="(line596)"></a><a name="ANYContent"></a><font color=Blue>-- or some 'XmlContent'-able value.</font>-<a name="(line597)"></a><a name="ANYContent"></a><font color=Blue>--</font>-<a name="(line598)"></a><a name="ANYContent"></a><font color=Blue>-- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.</font>-<a name="(line599)"></a><a name="ANYContent"></a><font color=Blue>-- Note: The Show instance for 'UnConverted' uses 'verbatim'.</font>-<a name="(line600)"></a><a name="ANYContent"></a><font color=Green><u>data</u></font> ANYContent <font color=Red>=</font> <font color=Green><u>forall</u></font> a <font color=Cyan>.</font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> Show a<font color=Cyan>)</font> <font color=Red>=></font> ANYContent a-<a name="(line601)"></a> <font color=Red>|</font> UnConverted <font color=Red>[</font>Content Posn<font color=Red>]</font>-<a name="(line602)"></a>-<a name="(line603)"></a><font color=Green><u>instance</u></font> Show ANYContent <font color=Green><u>where</u></font>-<a name="(line604)"></a> show <font color=Cyan>(</font>UnConverted c<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"UnConverted "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show <font color=Cyan>$</font> map verbatim c<font color=Cyan>)</font>-<a name="(line605)"></a> show <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"ANYContent "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show a<font color=Cyan>)</font>-<a name="(line606)"></a>-<a name="(line607)"></a><font color=Green><u>instance</u></font> Eq ANYContent <font color=Green><u>where</u></font>-<a name="(line608)"></a> a <font color=Cyan>==</font> b <font color=Red>=</font> show a <font color=Cyan>==</font> show b-<a name="(line609)"></a>-<a name="(line610)"></a><a name="List1"></a><font color=Blue>-- | The List1 type represents lists with at least one element.</font>-<a name="(line611)"></a><a name="List1"></a><font color=Blue>-- It is required for DTD content models that use + as a modifier.</font>-<a name="(line612)"></a><a name="List1"></a><font color=Green><u>data</u></font> List1 a <font color=Red>=</font> NonEmpty <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font> Show<font color=Cyan>)</font>-<a name="(line613)"></a>-<a name="(line614)"></a>-<a name="(line615)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line616)"></a><font color=Blue>-- Instances for new content-model types</font>-<a name="(line617)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line618)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line619)"></a> toHType m <font color=Red>=</font> Defined <font color=Magenta>"List1"</font> <font color=Red>[</font>hx<font color=Red>]</font>-<a name="(line620)"></a> <font color=Red>[</font>Constr <font color=Magenta>"NonEmpty"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>List hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>-<a name="(line621)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>NonEmpty x<font color=Cyan>)</font> <font color=Red>=</font> m-<a name="(line622)"></a> hx <font color=Red>=</font> toHType x-<a name="(line623)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line624)"></a> toContents <font color=Cyan>(</font>NonEmpty xs<font color=Cyan>)</font> <font color=Red>=</font> concatMap toContents xs-<a name="(line625)"></a> parseContents <font color=Red>=</font> fmap NonEmpty <font color=Cyan>$</font> many1 parseContents-<a name="(line626)"></a>-<a name="(line627)"></a><font color=Green><u>instance</u></font> HTypeable ANYContent <font color=Green><u>where</u></font>-<a name="(line628)"></a> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Prim <font color=Magenta>"ANYContent"</font> <font color=Magenta>"ANY"</font>-<a name="(line629)"></a><font color=Green><u>instance</u></font> XmlContent ANYContent <font color=Green><u>where</u></font>-<a name="(line630)"></a> toContents <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font> <font color=Red>=</font> toContents a-<a name="(line631)"></a> toContents <font color=Cyan>(</font>UnConverted s<font color=Cyan>)</font> <font color=Red>=</font> map <font color=Cyan>(</font>fmap <font color=Cyan>(</font>const ()<font color=Cyan>)</font><font color=Cyan>)</font> s-<a name="(line632)"></a> parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>UnConverted cs<font color=Cyan>)</font><font color=Cyan>,</font> []<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line633)"></a>-<a name="(line634)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line635)"></a><font color=Blue>-- </font>-<a name="(line636)"></a><font color=Blue>------------------------------------------------------------------------</font>+<pre><a name="(line1)"></a><font color=Blue>{-# LANGUAGE ExistentialQuantification #-}</font>+<a name="(line2)"></a>+<a name="(line3)"></a><font color=Blue>-- | The class 'XmlContent' is a kind of replacement for Read and Show:</font>+<a name="(line4)"></a><font color=Blue>-- it provides conversions between a generic XML tree representation</font>+<a name="(line5)"></a><font color=Blue>-- and your own more specialised typeful Haskell data trees.</font>+<a name="(line6)"></a><font color=Blue>--</font>+<a name="(line7)"></a><font color=Blue>-- If you are starting with a set of Haskell datatypes, use DrIFT to</font>+<a name="(line8)"></a><font color=Blue>-- derive instances of this class for you:</font>+<a name="(line9)"></a><font color=Blue>-- http:\/\/repetae.net\/john\/computer\/haskell\/DrIFT</font>+<a name="(line10)"></a><font color=Blue>-- If you are starting with an XML DTD, use HaXml's tool DtdToHaskell</font>+<a name="(line11)"></a><font color=Blue>-- to generate both the Haskell types and the corresponding instances.</font>+<a name="(line12)"></a><font color=Blue>--</font>+<a name="(line13)"></a><font color=Blue>-- This unified class interface replaces two previous (somewhat similar)</font>+<a name="(line14)"></a><font color=Blue>-- classes: Haskell2Xml and Xml2Haskell. There was no real reason to have</font>+<a name="(line15)"></a><font color=Blue>-- separate classes depending on how you originally defined your datatypes.</font>+<a name="(line16)"></a>+<a name="(line17)"></a><font color=Blue>-- The methods 'toContents' and 'parseContents' convert a value to and from</font>+<a name="(line18)"></a><font color=Blue>-- a generic internal representation of an XML document /without/ a DTD.</font>+<a name="(line19)"></a><font color=Blue>-- The functions 'toXml' and 'fromXml' convert a value to and from a generic</font>+<a name="(line20)"></a><font color=Blue>-- internal representation of an XML document /including/ a DTD.</font>+<a name="(line21)"></a><font color=Blue>-- The functions 'readXml' and 'showXml' convert to and from Strings.</font>+<a name="(line22)"></a><font color=Blue>-- The functions 'fReadXml' and 'fWriteXml' do the conversion to and from</font>+<a name="(line23)"></a><font color=Blue>-- the given filenames.</font>+<a name="(line24)"></a><font color=Blue>-- The functions 'hGetXml' and 'hPutXml' do the conversion to and from</font>+<a name="(line25)"></a><font color=Blue>-- the given file handles.</font>+<a name="(line26)"></a><font color=Blue>-- (See the type signatures.)</font>+<a name="(line27)"></a><font color=Blue>--</font>+<a name="(line28)"></a>+<a name="(line29)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent+<a name="(line30)"></a> <font color=Cyan>(</font> <font color=Blue>-- * Re-export the relevant set of generic XML document type definitions</font>+<a name="(line31)"></a> Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line32)"></a> <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line33)"></a> <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line34)"></a> <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line35)"></a> <font color=Cyan>,</font> Attribute()+<a name="(line36)"></a> <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line37)"></a> <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line38)"></a> <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line39)"></a> <font color=Blue>-- * The enabling classes, that define parsing\/unparsing between Haskell</font>+<a name="(line40)"></a> <font color=Blue>-- datatypes and a generic XML representation.</font>+<a name="(line41)"></a> <font color=Cyan>,</font> XmlContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line42)"></a> <font color=Cyan>,</font> XmlAttributes<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line43)"></a> <font color=Cyan>,</font> XmlAttrType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line44)"></a> <font color=Blue>-- ** Auxiliaries for writing parsers in the XmlContent class</font>+<a name="(line45)"></a> <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly+<a name="(line46)"></a> <font color=Cyan>,</font> XMLParser+<a name="(line47)"></a> <font color=Cyan>,</font> content<font color=Cyan>,</font> posnElement<font color=Cyan>,</font> element<font color=Cyan>,</font> interior<font color=Cyan>,</font> inElement<font color=Cyan>,</font> text<font color=Cyan>,</font> attributes+<a name="(line48)"></a> <font color=Cyan>,</font> posnElementWith<font color=Cyan>,</font> elementWith<font color=Cyan>,</font> inElementWith+<a name="(line49)"></a> <font color=Cyan>,</font> choice<font color=Cyan>,</font> definite <font color=Blue>-- ???</font>+<a name="(line50)"></a> <font color=Blue>-- ** Auxiliaries for generating in the XmlContent class</font>+<a name="(line51)"></a> <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemC<font color=Cyan>,</font> mkAttr+<a name="(line52)"></a> <font color=Cyan>,</font> toText<font color=Cyan>,</font> toCData+<a name="(line53)"></a> <font color=Blue>-- ** Auxiliaries for the attribute-related classes</font>+<a name="(line54)"></a> <font color=Cyan>,</font> maybeToAttr<font color=Cyan>,</font> defaultToAttr+<a name="(line55)"></a> <font color=Cyan>,</font> definiteA<font color=Cyan>,</font> defaultA<font color=Cyan>,</font> possibleA<font color=Cyan>,</font> fromAttrToStr<font color=Cyan>,</font> toAttrFrStr+<a name="(line56)"></a> <font color=Cyan>,</font> Defaultable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line57)"></a> <font color=Cyan>,</font> str2attr<font color=Cyan>,</font> attr2str<font color=Cyan>,</font> attval+<a name="(line58)"></a> <font color=Cyan>,</font> catMaybes <font color=Blue>-- re-exported from Maybe</font>+<a name="(line59)"></a> <font color=Blue>-- * Whole-document conversion functions</font>+<a name="(line60)"></a> <font color=Cyan>,</font> toXml<font color=Cyan>,</font> fromXml+<a name="(line61)"></a> <font color=Cyan>,</font> readXml<font color=Cyan>,</font> showXml<font color=Cyan>,</font> fpsShowXml+<a name="(line62)"></a> <font color=Cyan>,</font> fReadXml<font color=Cyan>,</font> fWriteXml<font color=Cyan>,</font> fpsWriteXml+<a name="(line63)"></a> <font color=Cyan>,</font> hGetXml<font color=Cyan>,</font> hPutXml<font color=Cyan>,</font> fpsHPutXml+<a name="(line64)"></a> <font color=Blue>-- * Explicit representation of Haskell datatype information</font>+<a name="(line65)"></a> <font color=Blue>-- (for conversion to a DTD)</font>+<a name="(line66)"></a> <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping+<a name="(line67)"></a> <font color=Blue>-- * Types useful for some content models</font>+<a name="(line68)"></a> <font color=Cyan>,</font> List1<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line69)"></a> <font color=Cyan>,</font> ANYContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line70)"></a> <font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line71)"></a>+<a name="(line72)"></a><font color=Green><u>import</u></font> IO+<a name="(line73)"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>catMaybes<font color=Cyan>)</font>+<a name="(line74)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>chr<font color=Cyan>,</font> isSpace<font color=Cyan>)</font>+<a name="(line75)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>isPrefixOf<font color=Cyan>,</font> isSuffixOf<font color=Cyan>)</font>+<a name="(line76)"></a>+<a name="(line77)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Cyan>(</font>render<font color=Cyan>)</font>+<a name="(line78)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Green><u>as</u></font> PP+<a name="(line79)"></a>+<a name="(line80)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types+<a name="(line81)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping+<a name="(line82)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn <font color=Cyan>(</font>Posn<font color=Cyan>,</font> posInNewCxt<font color=Cyan>)</font>+<a name="(line83)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Cyan>(</font>document<font color=Cyan>)</font>+<a name="(line84)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse <font color=Cyan>(</font>xmlParse<font color=Cyan>)</font>+<a name="(line85)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim <font color=Cyan>(</font>Verbatim<font color=Cyan>(</font>verbatim<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line86)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ByteStringPP <font color=Green><u>as</u></font> FPS <font color=Cyan>(</font>document<font color=Cyan>)</font>+<a name="(line87)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Green><u>as</u></font> FPS+<a name="(line88)"></a>+<a name="(line89)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly+<a name="(line90)"></a>+<a name="(line91)"></a><font color=Blue>-- #define DEBUG</font>+<a name="(line92)"></a>+<a name="(line93)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>+<a name="(line94)"></a><font color=Green><u>import</u></font> Debug<font color=Cyan>.</font>Trace<font color=Cyan>(</font>trace<font color=Cyan>)</font>+<a name="(line95)"></a><a name="debug"></a>debug <font color=Red>::</font> a <font color=Red>-></font> String <font color=Red>-></font> a+<a name="(line96)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v+<a name="(line97)"></a><font color=Magenta><em>#else</em></font>+<a name="(line98)"></a>debug <font color=Red>::</font> t <font color=Red>-></font> t1 <font color=Red>-></font> t+<a name="(line99)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> v+<a name="(line100)"></a><font color=Magenta><em>#endif</em></font>+<a name="(line101)"></a>+<a name="(line102)"></a>+<a name="(line103)"></a><a name="attval"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line104)"></a><font color=Blue>-- | Read a single attribute called "value".</font>+<a name="(line105)"></a>attval <font color=Red>::</font> <font color=Cyan>(</font>Read a<font color=Cyan>)</font> <font color=Red>=></font> Element i <font color=Red>-></font> a+<a name="(line106)"></a>attval <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> <font color=Red>=</font> read <font color=Cyan>(</font>show v<font color=Cyan>)</font>+<a name="(line107)"></a>+<a name="(line108)"></a><a name="mkAttr"></a><font color=Blue>-- | Generate a single attribute.</font>+<a name="(line109)"></a>mkAttr <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> Attribute+<a name="(line110)"></a>mkAttr n v <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font> AttValue <font color=Red>[</font>Left v<font color=Red>]</font><font color=Cyan>)</font>+<a name="(line111)"></a>+<a name="(line112)"></a><a name="mkElem"></a><font color=Blue>-- | Generate an element with no attributes, named for its HType.</font>+<a name="(line113)"></a>mkElem <font color=Red>::</font> XmlContent a <font color=Red>=></font> a <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-></font> Content ()+<a name="(line114)"></a>mkElem x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem <font color=Cyan>(</font>showHType <font color=Cyan>(</font>toHType x<font color=Cyan>)</font> <font color=Magenta>""</font><font color=Cyan>)</font> [] cs<font color=Cyan>)</font> ()+<a name="(line115)"></a>+<a name="(line116)"></a><a name="mkElemC"></a><font color=Blue>-- | Generate an element with no attributes, named directly.</font>+<a name="(line117)"></a>mkElemC <font color=Red>::</font> String <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-></font> Content ()+<a name="(line118)"></a>mkElemC x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem x [] cs<font color=Cyan>)</font> ()+<a name="(line119)"></a>+<a name="(line120)"></a><a name="toText"></a><font color=Blue>-- | Turn a simple string into XML text.</font>+<a name="(line121)"></a>toText <font color=Red>::</font> String <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font>+<a name="(line122)"></a>toText s <font color=Red>=</font> <font color=Red>[</font>CString False s ()<font color=Red>]</font>+<a name="(line123)"></a>+<a name="(line124)"></a><a name="toCData"></a><font color=Blue>-- | Turn a string into an XML CDATA section.</font>+<a name="(line125)"></a><font color=Blue>-- (i.e. special characters like '&' are preserved without interpretation.)</font>+<a name="(line126)"></a>toCData <font color=Red>::</font> String <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font>+<a name="(line127)"></a>toCData s <font color=Red>=</font> <font color=Red>[</font>CString True s ()<font color=Red>]</font>+<a name="(line128)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line129)"></a>+<a name="(line130)"></a> <font color=Blue>-- probably want to write DTD separately from value, and have</font>+<a name="(line131)"></a> <font color=Blue>-- easy ways to combine DTD + value into a document, or write</font>+<a name="(line132)"></a> <font color=Blue>-- them to separate files.</font>+<a name="(line133)"></a>+<a name="(line134)"></a><a name="fReadXml"></a><font color=Blue>-- | Read an XML document from a file and convert it to a fully-typed</font>+<a name="(line135)"></a><font color=Blue>-- Haskell value.</font>+<a name="(line136)"></a>fReadXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> FilePath <font color=Red>-></font> IO a+<a name="(line137)"></a>fReadXml fp <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line138)"></a> f <font color=Red><-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdin+<a name="(line139)"></a> <font color=Green><u>else</u></font> openFile fp ReadMode <font color=Cyan>)</font>+<a name="(line140)"></a> x <font color=Red><-</font> hGetContents f+<a name="(line141)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse fp x+<a name="(line142)"></a> y' <font color=Red>=</font> CElem y <font color=Cyan>(</font>posInNewCxt fp Nothing<font color=Cyan>)</font>+<a name="(line143)"></a> either fail return <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents <font color=Red>[</font>y'<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line144)"></a>+<a name="(line145)"></a><a name="fWriteXml"></a><font color=Blue>-- | Write a fully-typed Haskell value to the given file as an XML</font>+<a name="(line146)"></a><font color=Blue>-- document.</font>+<a name="(line147)"></a>fWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> FilePath <font color=Red>-></font> a <font color=Red>-></font> IO ()+<a name="(line148)"></a>fWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line149)"></a> f <font color=Red><-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout+<a name="(line150)"></a> <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>+<a name="(line151)"></a> hPutXml f False x+<a name="(line152)"></a> hClose f+<a name="(line153)"></a>+<a name="(line154)"></a><a name="fpsWriteXml"></a><font color=Blue>-- | Write any Haskell value to the given file as an XML document,</font>+<a name="(line155)"></a><font color=Blue>-- using the FastPackedString interface (output will not be prettified).</font>+<a name="(line156)"></a>fpsWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> FilePath <font color=Red>-></font> a <font color=Red>-></font> IO ()+<a name="(line157)"></a>fpsWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line158)"></a> f <font color=Red><-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout+<a name="(line159)"></a> <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>+<a name="(line160)"></a> fpsHPutXml f False x+<a name="(line161)"></a> hClose f+<a name="(line162)"></a>+<a name="(line163)"></a><a name="readXml"></a><font color=Blue>-- | Read a fully-typed XML document from a string.</font>+<a name="(line164)"></a>readXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> String <font color=Red>-></font> Either String a+<a name="(line165)"></a>readXml s <font color=Red>=</font>+<a name="(line166)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"string input"</font> s <font color=Green><u>in</u></font>+<a name="(line167)"></a> fst <font color=Cyan>(</font>runParser parseContents+<a name="(line168)"></a> <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"string input"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>+<a name="(line169)"></a>+<a name="(line170)"></a><a name="showXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>+<a name="(line171)"></a>showXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> String+<a name="(line172)"></a>showXml dtd x <font color=Red>=</font>+<a name="(line173)"></a> <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>+<a name="(line174)"></a> <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-></font> <font color=Cyan>(</font>render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x+<a name="(line175)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Magenta>""</font>+<a name="(line176)"></a>+<a name="(line177)"></a><a name="fpsShowXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a ByteString (without DTD).</font>+<a name="(line178)"></a>fpsShowXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> FPS<font color=Cyan>.</font>ByteString+<a name="(line179)"></a>fpsShowXml dtd x <font color=Red>=</font>+<a name="(line180)"></a> <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>+<a name="(line181)"></a> <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-></font> <font color=Cyan>(</font>FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x+<a name="(line182)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> FPS<font color=Cyan>.</font>empty+<a name="(line183)"></a>+<a name="(line184)"></a>+<a name="(line185)"></a><a name="toXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>+<a name="(line186)"></a>toXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Bool <font color=Red>-></font> a <font color=Red>-></font> Document ()+<a name="(line187)"></a>toXml dtd value <font color=Red>=</font>+<a name="(line188)"></a> <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>+<a name="(line189)"></a> Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line190)"></a> [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>+<a name="(line191)"></a> emptyST+<a name="(line192)"></a> <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>+<a name="(line193)"></a> <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs+<a name="(line194)"></a> <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-></font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs+<a name="(line195)"></a> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-></font> e <font color=Cyan>)</font>+<a name="(line196)"></a> []+<a name="(line197)"></a>+<a name="(line198)"></a><a name="fromXml"></a><font color=Blue>-- | Read a Haskell value from an XML document, ignoring the DTD and</font>+<a name="(line199)"></a><font color=Blue>-- using the Haskell result type to determine how to parse it.</font>+<a name="(line200)"></a>fromXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Document Posn <font color=Red>-></font> Either String a+<a name="(line201)"></a>fromXml <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>+<a name="(line202)"></a> <font color=Red>|</font> <font color=Magenta>"tuple"</font> <font color=Cyan>`isPrefixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>+<a name="(line203)"></a> <font color=Red>|</font> <font color=Magenta>"-XML"</font> <font color=Cyan>`isSuffixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>+<a name="(line204)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents+<a name="(line205)"></a> <font color=Red>[</font>CElem e <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"document"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>+<a name="(line206)"></a>+<a name="(line207)"></a>+<a name="(line208)"></a><a name="hGetXml"></a><font color=Blue>-- | Read a fully-typed XML document from a file handle.</font>+<a name="(line209)"></a>hGetXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Handle <font color=Red>-></font> IO a+<a name="(line210)"></a>hGetXml h <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line211)"></a> x <font color=Red><-</font> hGetContents h+<a name="(line212)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"file handle"</font> x+<a name="(line213)"></a> either fail return+<a name="(line214)"></a> <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents+<a name="(line215)"></a> <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"file handle"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line216)"></a>+<a name="(line217)"></a><a name="hPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle.</font>+<a name="(line218)"></a>hPutXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Handle <font color=Red>-></font> Bool <font color=Red>-></font> a <font color=Red>-></font> IO ()+<a name="(line219)"></a>hPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line220)"></a> <font color=Cyan>(</font>hPutStrLn h <font color=Cyan>.</font> render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x+<a name="(line221)"></a>+<a name="(line222)"></a><a name="fpsHPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle, using the</font>+<a name="(line223)"></a><font color=Blue>-- FastPackedString interface (output will not be prettified).</font>+<a name="(line224)"></a>fpsHPutXml <font color=Red>::</font> XmlContent a <font color=Red>=></font> Handle <font color=Red>-></font> Bool <font color=Red>-></font> a <font color=Red>-></font> IO ()+<a name="(line225)"></a>fpsHPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line226)"></a> <font color=Cyan>(</font>FPS<font color=Cyan>.</font>hPut h <font color=Cyan>.</font> FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x+<a name="(line227)"></a>+<a name="(line228)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line229)"></a>+<a name="(line230)"></a><a name="XMLParser"></a><font color=Blue>-- | We need a parsing monad for reading generic XML Content into specific</font>+<a name="(line231)"></a><a name="XMLParser"></a><font color=Blue>-- datatypes. This is a specialisation of the Text.ParserCombinators.Poly</font>+<a name="(line232)"></a><a name="XMLParser"></a><font color=Blue>-- ones, where the input token type is fixed as XML Content.</font>+<a name="(line233)"></a><a name="XMLParser"></a><font color=Green><u>type</u></font> XMLParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font> a+<a name="(line234)"></a>+<a name="(line235)"></a>+<a name="(line236)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line237)"></a><font color=Blue>-- Some useful parsing combinators</font>+<a name="(line238)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line239)"></a>+<a name="(line240)"></a><a name="content"></a><font color=Blue>-- | The most primitive combinator for XMLParser - get one content item.</font>+<a name="(line241)"></a>content <font color=Red>::</font> String <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>+<a name="(line242)"></a>content word <font color=Red>=</font> next <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>" when expecting "</font><font color=Cyan>++</font>word<font color=Cyan>)</font>+<a name="(line243)"></a>+<a name="(line244)"></a><a name="posnElementWith"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>+<a name="(line245)"></a><font color=Blue>-- tags, using the given matching function.</font>+<a name="(line246)"></a><font color=Blue>-- (Skips over comments and whitespace, rejects text and refs.</font>+<a name="(line247)"></a><font color=Blue>-- Also returns position of element.)</font>+<a name="(line248)"></a>posnElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>String<font color=Red>-></font>Bool<font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>String<font color=Red>]</font>+<a name="(line249)"></a> <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>+<a name="(line250)"></a>posnElementWith match tags <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line251)"></a> <font color=Cyan>{</font> c <font color=Red><-</font> content <font color=Cyan>(</font>formatted tags<font color=Cyan>)</font>+<a name="(line252)"></a> <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>+<a name="(line253)"></a> CElem e<font color=Red>@</font><font color=Cyan>(</font>Elem t <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos+<a name="(line254)"></a> <font color=Red>|</font> any <font color=Cyan>(</font>match t<font color=Cyan>)</font> tags <font color=Red>-></font> return <font color=Cyan>(</font>pos<font color=Cyan>,</font> e<font color=Cyan>)</font>+<a name="(line255)"></a> <font color=Red>|</font> otherwise <font color=Red>-></font> fail <font color=Cyan>(</font><font color=Magenta>"Found a <"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>">, but expected "</font>+<a name="(line256)"></a> <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>+<a name="(line257)"></a> CString b s pos+<a name="(line258)"></a> <font color=Red>|</font> not b <font color=Cyan>&&</font> all isSpace s <font color=Red>-></font> posnElementWith match tags+<a name="(line259)"></a> <font color=Blue>-- ignore blank space</font>+<a name="(line260)"></a> <font color=Red>|</font> otherwise <font color=Red>-></font> fail <font color=Cyan>(</font><font color=Magenta>"Found text content, but expected "</font>+<a name="(line261)"></a> <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\ntext is: "</font><font color=Cyan>++</font>s+<a name="(line262)"></a> <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>+<a name="(line263)"></a> CRef r pos <font color=Red>-></font> fail <font color=Cyan>(</font><font color=Magenta>"Found reference, but expected "</font>+<a name="(line264)"></a> <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nreference is: "</font><font color=Cyan>++</font>verbatim r+<a name="(line265)"></a> <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>+<a name="(line266)"></a> CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-></font> posnElementWith match tags <font color=Blue>-- skip comments, PIs, etc.</font>+<a name="(line267)"></a> <font color=Cyan>}</font>+<a name="(line268)"></a> <font color=Green><u>where</u></font>+<a name="(line269)"></a> formatted <font color=Red>[</font>t<font color=Red>]</font> <font color=Red>=</font> <font color=Magenta>"a <"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>">"</font>+<a name="(line270)"></a> formatted tgs <font color=Red>=</font> <font color=Magenta>"one of"</font><font color=Cyan>++</font> concatMap <font color=Cyan>(</font><font color=Red>\</font>t<font color=Red>-></font><font color=Magenta>" <"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>">"</font><font color=Cyan>)</font> tgs+<a name="(line271)"></a>+<a name="(line272)"></a><a name="posnElement"></a><font color=Blue>-- | A specialisation of @posnElementWith (==)@.</font>+<a name="(line273)"></a>posnElement <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>+<a name="(line274)"></a>posnElement <font color=Red>=</font> posnElementWith <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>+<a name="(line275)"></a>+<a name="(line276)"></a><a name="element"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>+<a name="(line277)"></a><font color=Blue>-- tags. (Skips over comments and whitespace, rejects text and refs.)</font>+<a name="(line278)"></a>element <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>+<a name="(line279)"></a>element tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElement tags<font color=Cyan>)</font>+<a name="(line280)"></a> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>+<a name="(line281)"></a>+<a name="(line282)"></a><a name="elementWith"></a><font color=Blue>-- | Like element, only permits a more flexible match against the tagname.</font>+<a name="(line283)"></a>elementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>String<font color=Red>-></font>Bool<font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-></font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>+<a name="(line284)"></a>elementWith match tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElementWith match tags<font color=Cyan>)</font>+<a name="(line285)"></a> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>+<a name="(line286)"></a>+<a name="(line287)"></a><a name="interior"></a><font color=Blue>-- | Run an XMLParser on the contents of the given element (i.e. not on the</font>+<a name="(line288)"></a><font color=Blue>-- current monadic content sequence), checking that the contents are</font>+<a name="(line289)"></a><font color=Blue>-- exhausted, before returning the calculated value within the current</font>+<a name="(line290)"></a><font color=Blue>-- parser context.</font>+<a name="(line291)"></a>interior <font color=Red>::</font> Element Posn <font color=Red>-></font> XMLParser a <font color=Red>-></font> XMLParser a+<a name="(line292)"></a>interior <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> p <font color=Red>=</font>+<a name="(line293)"></a> <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>+<a name="(line294)"></a> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> fail msg+<a name="(line295)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> []<font color=Cyan>)</font> <font color=Red>-></font> return x+<a name="(line296)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> ds<font color=Red>@</font><font color=Cyan>(</font>d<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line297)"></a> <font color=Red>|</font> all onlyMisc ds <font color=Red>-></font> return x+<a name="(line298)"></a> <font color=Red>|</font> otherwise <font color=Red>-></font> fail <font color=Cyan>(</font><font color=Magenta>"Too many elements inside <"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"> at\n"</font>+<a name="(line299)"></a> <font color=Cyan>++</font>show <font color=Cyan>(</font>info d<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"\n"</font>+<a name="(line300)"></a> <font color=Cyan>++</font><font color=Magenta>"Found excess: "</font><font color=Cyan>++</font>verbatim d<font color=Cyan>)</font>+<a name="(line301)"></a> <font color=Green><u>where</u></font> onlyMisc <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line302)"></a> onlyMisc <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> all isSpace s <font color=Red>=</font> True+<a name="(line303)"></a> onlyMisc <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line304)"></a>+<a name="(line305)"></a><a name="inElement"></a><font color=Blue>-- | A combination of element + interior.</font>+<a name="(line306)"></a>inElement <font color=Red>::</font> String <font color=Red>-></font> XMLParser a <font color=Red>-></font> XMLParser a+<a name="(line307)"></a>inElement tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font>tag<font color=Red>]</font><font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line308)"></a>+<a name="(line309)"></a><a name="inElementWith"></a><font color=Blue>-- | A combination of elementWith + interior.</font>+<a name="(line310)"></a>inElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>String<font color=Red>-></font>Bool<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> XMLParser a <font color=Red>-></font> XMLParser a+<a name="(line311)"></a>inElementWith match tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> elementWith match <font color=Red>[</font>tag<font color=Red>]</font>+<a name="(line312)"></a> <font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line313)"></a>+<a name="(line314)"></a><a name="attributes"></a><font color=Blue>-- | Do some parsing of the attributes of the given element</font>+<a name="(line315)"></a>attributes <font color=Red>::</font> XmlAttributes a <font color=Red>=></font> Element Posn <font color=Red>-></font> XMLParser a+<a name="(line316)"></a>attributes <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> return <font color=Cyan>(</font>fromAttrs <font color=Green><u>as</u></font><font color=Cyan>)</font>+<a name="(line317)"></a>+<a name="(line318)"></a><a name="text"></a><font color=Blue>-- | 'text' is a counterpart to 'element', parsing text content if it</font>+<a name="(line319)"></a><font color=Blue>-- exists. Adjacent text and references are coalesced.</font>+<a name="(line320)"></a>text <font color=Red>::</font> XMLParser String+<a name="(line321)"></a>text <font color=Red>=</font> text' []+<a name="(line322)"></a> <font color=Green><u>where</u></font> text' acc <font color=Red>=</font>+<a name="(line323)"></a> <font color=Green><u>do</u></font> <font color=Cyan>{</font> c <font color=Red><-</font> content <font color=Magenta>"plain text"</font>+<a name="(line324)"></a> <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>+<a name="(line325)"></a> CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font> <font color=Red>-></font> text' <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font>+<a name="(line326)"></a> CRef <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>-></font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"&#"</font><font color=Cyan>++</font>show s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font> <font color=Red><b>:</b></font>acc<font color=Cyan>)</font>+<a name="(line327)"></a> CRef <font color=Cyan>(</font>RefEntity s<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>-></font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>'&'</font><font color=Red><b>:</b></font>s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font><font color=Red><b>:</b></font>acc<font color=Cyan>)</font>+<a name="(line328)"></a> CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-></font> text' acc+<a name="(line329)"></a> CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> reparse <font color=Red>[</font>c<font color=Red>]</font> <font color=Blue>-- put it back!</font>+<a name="(line330)"></a> <font color=Cyan>;</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>+<a name="(line331)"></a> <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line332)"></a> <font color=Cyan>}</font>+<a name="(line333)"></a> <font color=Cyan>}</font>+<a name="(line334)"></a> <font color=Cyan>`onFail`</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>+<a name="(line335)"></a> <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>)</font>+<a name="(line336)"></a>+<a name="(line337)"></a>+<a name="(line338)"></a><a name="choice"></a><font color=Blue>-- | 'choice f p' means if parseContents succeeds, apply f to the result,</font>+<a name="(line339)"></a><font color=Blue>-- otherwise use the continuation parser.</font>+<a name="(line340)"></a>choice <font color=Red>::</font> XmlContent a <font color=Red>=></font> <font color=Cyan>(</font>a <font color=Red>-></font> b<font color=Cyan>)</font> <font color=Red>-></font> XMLParser b <font color=Red>-></font> XMLParser b+<a name="(line341)"></a>choice cons <font color=Cyan>(</font>P other<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line342)"></a> P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-></font> <font color=Green><u>case</u></font> runParser parseContents cs <font color=Green><u>of</u></font>+<a name="(line343)"></a> <font color=Cyan>(</font>Left <font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> other cs+<a name="(line344)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>cons x<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line345)"></a>+<a name="(line346)"></a><font color=Blue>--choice cons other = fmap cons parseContents `onFail` other</font>+<a name="(line347)"></a>+<a name="(line348)"></a><a name="definite"></a><font color=Blue>-- | not sure this is needed now. 'definite p' previously ensured that</font>+<a name="(line349)"></a><font color=Blue>-- an element was definitely present. Now I think the monad might take</font>+<a name="(line350)"></a><font color=Blue>-- care of that for us.</font>+<a name="(line351)"></a>definite <font color=Red>::</font> XmlContent a <font color=Red>=></font> XMLParser a <font color=Red>-></font> String <font color=Red>-></font> String <font color=Red>-></font> XMLParser a+<a name="(line352)"></a>definite p inner tag <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-></font> <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>+<a name="(line353)"></a> <font color=Cyan>(</font>Left <font color=Green><u>_</u></font><font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg'<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font>+<a name="(line354)"></a> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line355)"></a> <font color=Green><u>where</u></font> msg' <font color=Red>=</font> <font color=Magenta>"content error: expected "</font><font color=Cyan>++</font>inner<font color=Cyan>++</font><font color=Magenta>" inside <"</font><font color=Cyan>++</font>tag+<a name="(line356)"></a> <font color=Cyan>++</font><font color=Magenta>"> element\n"</font>+<a name="(line357)"></a>+<a name="(line358)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line359)"></a>+<a name="(line360)"></a><a name="XmlContent"></a><font color=Blue>-- | The @XmlContent@ class promises that an XML Content element can be</font>+<a name="(line361)"></a><a name="XmlContent"></a><font color=Blue>-- converted to and from a Haskell value.</font>+<a name="(line362)"></a><a name="XmlContent"></a><font color=Green><u>class</u></font> HTypeable a <font color=Red>=></font> XmlContent a <font color=Green><u>where</u></font>+<a name="(line363)"></a> <font color=Blue>-- | Convert from XML to Haskell</font>+<a name="(line364)"></a> parseContents <font color=Red>::</font> XMLParser a+<a name="(line365)"></a> <font color=Blue>-- | Convert from Haskell to XML</font>+<a name="(line366)"></a> toContents <font color=Red>::</font> a <font color=Red>-></font> <font color=Red>[</font>Content ()<font color=Red>]</font>+<a name="(line367)"></a>+<a name="(line368)"></a> <font color=Blue>-- | Dummy functions (for most types): used /only/ in the Char instance</font>+<a name="(line369)"></a> <font color=Blue>-- for coercing lists of Char into String.</font>+<a name="(line370)"></a> xToChar <font color=Red>::</font> a <font color=Red>-></font> Char+<a name="(line371)"></a> xFromChar <font color=Red>::</font> Char <font color=Red>-></font> a+<a name="(line372)"></a> xToChar <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xToChar used in error"</font>+<a name="(line373)"></a> xFromChar <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xFromChar used in error"</font>+<a name="(line374)"></a>+<a name="(line375)"></a><a name="XmlAttributes"></a><font color=Blue>-- | The @XmlAttributes@ class promises that a list of XML tag attributes</font>+<a name="(line376)"></a><a name="XmlAttributes"></a><font color=Blue>-- can be converted to and from a Haskell value.</font>+<a name="(line377)"></a><a name="XmlAttributes"></a><font color=Green><u>class</u></font> XmlAttributes a <font color=Green><u>where</u></font>+<a name="(line378)"></a> fromAttrs <font color=Red>::</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> a+<a name="(line379)"></a> toAttrs <font color=Red>::</font> a <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font>+<a name="(line380)"></a><a name="XmlAttrType"></a><font color=Blue>-- | The @XmlAttrType@ class promises that an attribute taking an XML</font>+<a name="(line381)"></a><a name="XmlAttrType"></a><font color=Blue>-- enumerated type can be converted to and from a Haskell value.</font>+<a name="(line382)"></a><a name="XmlAttrType"></a><font color=Green><u>class</u></font> XmlAttrType a <font color=Green><u>where</u></font>+<a name="(line383)"></a> fromAttrToTyp <font color=Red>::</font> String <font color=Red>-></font> Attribute <font color=Red>-></font> Maybe a+<a name="(line384)"></a> toAttrFrTyp <font color=Red>::</font> String <font color=Red>-></font> a <font color=Red>-></font> Maybe Attribute+<a name="(line385)"></a>+<a name="(line386)"></a>+<a name="(line387)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line388)"></a><font color=Blue>-- Instances for all the standard basic datatypes.</font>+<a name="(line389)"></a><font color=Blue>-- These are for Haskell datatypes being derived to go to XML.</font>+<a name="(line390)"></a><font color=Blue>-- DtdToHaskell does not use these instances.</font>+<a name="(line391)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line392)"></a>+<a name="(line393)"></a><font color=Green><u>instance</u></font> XmlContent Bool <font color=Green><u>where</u></font>+<a name="(line394)"></a> toContents b <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"bool"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show b<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line395)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"bool"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line396)"></a>+<a name="(line397)"></a><font color=Green><u>instance</u></font> XmlContent Int <font color=Green><u>where</u></font>+<a name="(line398)"></a> toContents i <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"int"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line399)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"int"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line400)"></a>+<a name="(line401)"></a><font color=Green><u>instance</u></font> XmlContent Integer <font color=Green><u>where</u></font>+<a name="(line402)"></a> toContents i <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"integer"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line403)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"integer"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line404)"></a>+<a name="(line405)"></a><font color=Green><u>instance</u></font> XmlContent Float <font color=Green><u>where</u></font>+<a name="(line406)"></a> toContents i <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"float"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line407)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"float"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line408)"></a>+<a name="(line409)"></a><font color=Green><u>instance</u></font> XmlContent Double <font color=Green><u>where</u></font>+<a name="(line410)"></a> toContents i <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"double"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line411)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"double"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line412)"></a>+<a name="(line413)"></a><font color=Green><u>instance</u></font> XmlContent Char <font color=Green><u>where</u></font>+<a name="(line414)"></a> <font color=Blue>-- NOT in a string</font>+<a name="(line415)"></a> toContents c <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"char"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line416)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font><font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font>+<a name="(line417)"></a> <font color=Red><-</font> element <font color=Red>[</font><font color=Magenta>"char"</font><font color=Red>]</font>+<a name="(line418)"></a> <font color=Cyan>;</font> return c+<a name="(line419)"></a> <font color=Cyan>}</font>+<a name="(line420)"></a> <font color=Blue>-- Only defined for Char and no other types:</font>+<a name="(line421)"></a> xToChar <font color=Red>=</font> id+<a name="(line422)"></a> xFromChar <font color=Red>=</font> id+<a name="(line423)"></a>+<a name="(line424)"></a><font color=Green><u>instance</u></font> XmlContent a <font color=Red>=></font> XmlContent <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>+<a name="(line425)"></a> toContents xs <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font>+<a name="(line426)"></a> <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font>+<a name="(line427)"></a> <font color=Red>[</font>mkElem <font color=Magenta>"string"</font> <font color=Red>[</font>CString True <font color=Cyan>(</font>map xToChar xs<font color=Cyan>)</font> ()<font color=Red>]</font><font color=Red>]</font>+<a name="(line428)"></a> <font color=Green><u>_</u></font> <font color=Red>-></font> <font color=Red>[</font>mkElem xs <font color=Cyan>(</font>concatMap toContents xs<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line429)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs+<a name="(line430)"></a> parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>x <font color=Red>-></font>+<a name="(line431)"></a> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>+<a name="(line432)"></a> <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>+<a name="(line433)"></a> <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line434)"></a> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"string"</font> [] <font color=Red>[</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>+<a name="(line435)"></a> <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line436)"></a> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e [] xs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> <font color=Magenta>"list"</font> <font color=Cyan>`isPrefixOf`</font> e+<a name="(line437)"></a> <font color=Red>-></font> scanElements xs+<a name="(line438)"></a> <font color=Green><u>where</u></font>+<a name="(line439)"></a> <font color=Blue>-- scanElements :: [Content] -> (Either String [a],[Content])</font>+<a name="(line440)"></a> scanElements [] <font color=Red>=</font> <font color=Cyan>(</font>Right []<font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line441)"></a> scanElements es <font color=Red>=</font>+<a name="(line442)"></a> <font color=Green><u>case</u></font> runParser parseContents es <font color=Green><u>of</u></font>+<a name="(line443)"></a> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg<font color=Cyan>)</font><font color=Cyan>,</font> es'<font color=Cyan>)</font>+<a name="(line444)"></a> <font color=Cyan>(</font>Right y<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-></font>+<a name="(line445)"></a> <font color=Green><u>case</u></font> scanElements es' <font color=Green><u>of</u></font>+<a name="(line446)"></a> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> ds<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> ds<font color=Cyan>)</font>+<a name="(line447)"></a> <font color=Cyan>(</font>Right ys<font color=Cyan>,</font> ds<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font><font color=Cyan>,</font> ds<font color=Cyan>)</font>+<a name="(line448)"></a> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>+<a name="(line449)"></a> <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False+<a name="(line450)"></a> <font color=Cyan>,</font><font color=Magenta>"Expected a <list-...>, but found a <"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"> at\n"</font>+<a name="(line451)"></a> <font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line452)"></a> <font color=Cyan>(</font>CRef r pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>+<a name="(line453)"></a> <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False+<a name="(line454)"></a> <font color=Cyan>,</font><font color=Magenta>"Expected a <list-...>, but found a ref "</font>+<a name="(line455)"></a> <font color=Cyan>++</font>verbatim r<font color=Cyan>++</font><font color=Magenta>" at\n"</font><font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line456)"></a> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>-></font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>P p<font color=Cyan>)</font><font color=Red>-></font> p<font color=Cyan>)</font> parseContents<font color=Cyan>)</font> cs <font color=Blue>-- skip comments etc.</font>+<a name="(line457)"></a> [] <font color=Red>-></font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False+<a name="(line458)"></a> <font color=Cyan>,</font><font color=Magenta>"Ran out of input XML whilst secondary parsing"</font><font color=Cyan>)</font>+<a name="(line459)"></a> <font color=Cyan>,</font> []<font color=Cyan>)</font>+<a name="(line460)"></a> <font color=Cyan>)</font>+<a name="(line461)"></a>+<a name="(line462)"></a><font color=Green><u>instance</u></font> XmlContent () <font color=Green><u>where</u></font>+<a name="(line463)"></a> toContents () <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"unit"</font> [] []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line464)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> element <font color=Red>[</font><font color=Magenta>"unit"</font><font color=Red>]</font><font color=Cyan>;</font> return () <font color=Cyan>}</font>+<a name="(line465)"></a>+<a name="(line466)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line467)"></a> toContents <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b+<a name="(line468)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line469)"></a> <font color=Cyan>{</font> a <font color=Red><-</font> parseContents+<a name="(line470)"></a> <font color=Cyan>;</font> b <font color=Red><-</font> parseContents+<a name="(line471)"></a> <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font>+<a name="(line472)"></a> <font color=Cyan>}</font>+<a name="(line473)"></a>+<a name="(line474)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line475)"></a> toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z+<a name="(line476)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line477)"></a> <font color=Cyan>{</font> a <font color=Red><-</font> parseContents+<a name="(line478)"></a> <font color=Cyan>;</font> b <font color=Red><-</font> parseContents+<a name="(line479)"></a> <font color=Cyan>;</font> c <font color=Red><-</font> parseContents+<a name="(line480)"></a> <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line481)"></a> <font color=Cyan>}</font>+<a name="(line482)"></a>+<a name="(line483)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d<font color=Cyan>)</font> <font color=Red>=></font>+<a name="(line484)"></a> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line485)"></a> toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z+<a name="(line486)"></a> <font color=Cyan>++</font> toContents t+<a name="(line487)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line488)"></a> <font color=Cyan>{</font> a <font color=Red><-</font> parseContents+<a name="(line489)"></a> <font color=Cyan>;</font> b <font color=Red><-</font> parseContents+<a name="(line490)"></a> <font color=Cyan>;</font> c <font color=Red><-</font> parseContents+<a name="(line491)"></a> <font color=Cyan>;</font> d <font color=Red><-</font> parseContents+<a name="(line492)"></a> <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font>+<a name="(line493)"></a> <font color=Cyan>}</font>+<a name="(line494)"></a>+<a name="(line495)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d+<a name="(line496)"></a> <font color=Cyan>,</font> XmlContent e <font color=Cyan>)</font> <font color=Red>=></font>+<a name="(line497)"></a> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line498)"></a> toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>,</font>u<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z+<a name="(line499)"></a> <font color=Cyan>++</font> toContents t <font color=Cyan>++</font> toContents u+<a name="(line500)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line501)"></a> <font color=Cyan>{</font> a <font color=Red><-</font> parseContents+<a name="(line502)"></a> <font color=Cyan>;</font> b <font color=Red><-</font> parseContents+<a name="(line503)"></a> <font color=Cyan>;</font> c <font color=Red><-</font> parseContents+<a name="(line504)"></a> <font color=Cyan>;</font> d <font color=Red><-</font> parseContents+<a name="(line505)"></a> <font color=Cyan>;</font> e <font color=Red><-</font> parseContents+<a name="(line506)"></a> <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font>+<a name="(line507)"></a> <font color=Cyan>}</font>+<a name="(line508)"></a>+<a name="(line509)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d+<a name="(line510)"></a> <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f <font color=Cyan>)</font> <font color=Red>=></font>+<a name="(line511)"></a> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line512)"></a> toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>,</font>u<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z+<a name="(line513)"></a> <font color=Cyan>++</font> toContents t <font color=Cyan>++</font> toContents u <font color=Cyan>++</font> toContents v+<a name="(line514)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line515)"></a> <font color=Cyan>{</font> a <font color=Red><-</font> parseContents+<a name="(line516)"></a> <font color=Cyan>;</font> b <font color=Red><-</font> parseContents+<a name="(line517)"></a> <font color=Cyan>;</font> c <font color=Red><-</font> parseContents+<a name="(line518)"></a> <font color=Cyan>;</font> d <font color=Red><-</font> parseContents+<a name="(line519)"></a> <font color=Cyan>;</font> e <font color=Red><-</font> parseContents+<a name="(line520)"></a> <font color=Cyan>;</font> f <font color=Red><-</font> parseContents+<a name="(line521)"></a> <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font>+<a name="(line522)"></a> <font color=Cyan>}</font>+<a name="(line523)"></a>+<a name="(line524)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line525)"></a> toContents m <font color=Red>=</font> <font color=Red>[</font>mkElem m <font color=Cyan>(</font>maybe [] toContents m<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line526)"></a> parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line527)"></a> <font color=Cyan>{</font> e <font color=Red><-</font> elementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Red>[</font><font color=Magenta>"maybe"</font><font color=Red>]</font>+<a name="(line528)"></a> <font color=Cyan>;</font> <font color=Green><u>case</u></font> e <font color=Green><u>of</u></font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] []<font color=Cyan>)</font> <font color=Red>-></font> return Nothing+<a name="(line529)"></a> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> fmap Just <font color=Cyan>(</font>interior e parseContents<font color=Cyan>)</font>+<a name="(line530)"></a> <font color=Cyan>}</font>+<a name="(line531)"></a>+<a name="(line532)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line533)"></a> toContents v<font color=Red>@</font><font color=Cyan>(</font>Left aa<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line534)"></a> <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>0</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents aa<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line535)"></a> toContents v<font color=Red>@</font><font color=Cyan>(</font>Right ab<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line536)"></a> <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>1</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents ab<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line537)"></a> parseContents <font color=Red>=</font>+<a name="(line538)"></a> <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Left"</font> <font color=Cyan>$</font> fmap Left parseContents<font color=Cyan>)</font>+<a name="(line539)"></a> <font color=Cyan>`onFail`</font>+<a name="(line540)"></a> <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Right"</font> <font color=Cyan>$</font> fmap Right parseContents<font color=Cyan>)</font>+<a name="(line541)"></a>+<a name="(line542)"></a><font color=Blue>-- do{ e@(Elem t [] _) <- element ["Left","Right"]</font>+<a name="(line543)"></a><font color=Blue>-- ; case t of</font>+<a name="(line544)"></a><font color=Blue>-- _ | "Left" `isPrefixOf` t -> fmap Left (interior e parseContents)</font>+<a name="(line545)"></a><font color=Blue>-- | "Right" `isPrefixOf` t -> fmap Right (interior e parseContents)</font>+<a name="(line546)"></a><font color=Blue>-- }</font>+<a name="(line547)"></a>+<a name="(line548)"></a>+<a name="(line549)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line550)"></a><font color=Blue>-- Useful auxiliaries for "fromAttributes"</font>+<a name="(line551)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line552)"></a>+<a name="(line553)"></a><a name="Defaultable"></a><font color=Blue>-- | If an attribute is defaultable, then it either takes the default</font>+<a name="(line554)"></a><a name="Defaultable"></a><font color=Blue>-- value (which is omitted from the output), or a non-default value</font>+<a name="(line555)"></a><a name="Defaultable"></a><font color=Blue>-- (which obviously must be printed).</font>+<a name="(line556)"></a><a name="Defaultable"></a><font color=Green><u>data</u></font> Defaultable a <font color=Red>=</font> Default a <font color=Red>|</font> NonDefault a <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line557)"></a>+<a name="(line558)"></a><a name="searchMaybe"></a>searchMaybe <font color=Red>::</font> <font color=Cyan>(</font>a <font color=Red>-></font> Maybe b<font color=Cyan>)</font> <font color=Red>-></font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-></font> Maybe b+<a name="(line559)"></a>searchMaybe <font color=Green><u>_</u></font> [] <font color=Red>=</font> Nothing+<a name="(line560)"></a>searchMaybe f <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line561)"></a> <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font>+<a name="(line562)"></a> <font color=Green><u>case</u></font> fx <font color=Green><u>of</u></font>+<a name="(line563)"></a> Nothing <font color=Red>-></font> searchMaybe f xs+<a name="(line564)"></a> <font color=Cyan>(</font>Just <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-></font> fx+<a name="(line565)"></a>+<a name="(line566)"></a><a name="maybeToAttr"></a>maybeToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>a<font color=Red>-></font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> Maybe a+<a name="(line567)"></a> <font color=Red>-></font> Maybe Attribute+<a name="(line568)"></a>maybeToAttr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> Nothing <font color=Red>=</font> Nothing+<a name="(line569)"></a>maybeToAttr to n <font color=Cyan>(</font>Just v<font color=Cyan>)</font> <font color=Red>=</font> to n v+<a name="(line570)"></a>+<a name="(line571)"></a><a name="defaultToAttr"></a>defaultToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>a<font color=Red>-></font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> Defaultable a+<a name="(line572)"></a> <font color=Red>-></font> Maybe Attribute+<a name="(line573)"></a>defaultToAttr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Cyan>(</font>Default <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Nothing+<a name="(line574)"></a>defaultToAttr to n <font color=Cyan>(</font>NonDefault v<font color=Cyan>)</font> <font color=Red>=</font> to n v+<a name="(line575)"></a>+<a name="(line576)"></a><a name="definiteA"></a>definiteA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>Attribute<font color=Red>-></font>Maybe a<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> String+<a name="(line577)"></a> <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> a+<a name="(line578)"></a>definiteA from tag at <font color=Green><u>as</u></font> <font color=Red>=</font>+<a name="(line579)"></a> <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>+<a name="(line580)"></a> Nothing <font color=Red>-></font> error <font color=Cyan>(</font><font color=Magenta>"missing attribute "</font><font color=Cyan>++</font>at<font color=Cyan>++</font><font color=Magenta>" in tag <"</font><font color=Cyan>++</font>tag<font color=Cyan>++</font><font color=Magenta>">"</font><font color=Cyan>)</font>+<a name="(line581)"></a> <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-></font> a+<a name="(line582)"></a>+<a name="(line583)"></a><a name="defaultA"></a>defaultA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>Attribute<font color=Red>-></font>Maybe a<font color=Cyan>)</font> <font color=Red>-></font> a <font color=Red>-></font> String+<a name="(line584)"></a> <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> Defaultable a+<a name="(line585)"></a>defaultA from def at <font color=Green><u>as</u></font> <font color=Red>=</font>+<a name="(line586)"></a> <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>+<a name="(line587)"></a> Nothing <font color=Red>-></font> Default def+<a name="(line588)"></a> <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-></font> NonDefault a+<a name="(line589)"></a>+<a name="(line590)"></a><a name="possibleA"></a>possibleA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-></font>Attribute<font color=Red>-></font>Maybe a<font color=Cyan>)</font> <font color=Red>-></font> String <font color=Red>-></font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-></font> Maybe a+<a name="(line591)"></a>possibleA from at <font color=Green><u>as</u></font> <font color=Red>=</font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font>+<a name="(line592)"></a>+<a name="(line593)"></a><a name="fromAttrToStr"></a>fromAttrToStr <font color=Red>::</font> String <font color=Red>-></font> Attribute <font color=Red>-></font> Maybe String+<a name="(line594)"></a>fromAttrToStr n <font color=Cyan>(</font>n0<font color=Cyan>,</font>v<font color=Cyan>)</font>+<a name="(line595)"></a> <font color=Red>|</font> n <font color=Cyan>==</font> n0 <font color=Red>=</font> Just <font color=Cyan>(</font>attr2str v<font color=Cyan>)</font>+<a name="(line596)"></a> <font color=Red>|</font> otherwise <font color=Red>=</font> Nothing+<a name="(line597)"></a>+<a name="(line598)"></a><a name="toAttrFrStr"></a>toAttrFrStr <font color=Red>::</font> String <font color=Red>-></font> String <font color=Red>-></font> Maybe Attribute+<a name="(line599)"></a>toAttrFrStr n v <font color=Red>=</font> Just <font color=Cyan>(</font>n<font color=Cyan>,</font> str2attr v<font color=Cyan>)</font>+<a name="(line600)"></a>+<a name="(line601)"></a><a name="str2attr"></a>str2attr <font color=Red>::</font> String <font color=Red>-></font> AttValue+<a name="(line602)"></a>str2attr s <font color=Red>=</font>+<a name="(line603)"></a> <font color=Green><u>let</u></font> f t <font color=Red>=</font>+<a name="(line604)"></a> <font color=Green><u>let</u></font> <font color=Cyan>(</font>l<font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>=</font> span <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-></font> not <font color=Cyan>(</font>elem c <font color=Magenta>"\"&<>'"</font><font color=Cyan>)</font><font color=Cyan>)</font> t+<a name="(line605)"></a> <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> null r <font color=Green><u>then</u></font> <font color=Red>[</font>Left l<font color=Red>]</font>+<a name="(line606)"></a> <font color=Green><u>else</u></font> Left l<font color=Red><b>:</b></font> Right <font color=Cyan>(</font>g <font color=Cyan>(</font>head r<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font> f <font color=Cyan>(</font>tail r<font color=Cyan>)</font>+<a name="(line607)"></a> g <font color=Magenta>'"'</font> <font color=Red>=</font> RefEntity <font color=Magenta>"quot"</font>+<a name="(line608)"></a> g <font color=Magenta>'&'</font> <font color=Red>=</font> RefEntity <font color=Magenta>"amp"</font>+<a name="(line609)"></a> g <font color=Magenta>'<'</font> <font color=Red>=</font> RefEntity <font color=Magenta>"lt"</font>+<a name="(line610)"></a> g <font color=Magenta>'>'</font> <font color=Red>=</font> RefEntity <font color=Magenta>"gt"</font>+<a name="(line611)"></a> g <font color=Magenta>'\''</font> <font color=Red>=</font> RefEntity <font color=Magenta>"apos"</font>+<a name="(line612)"></a> <font color=Green><u>in</u></font> AttValue <font color=Cyan>(</font>f s<font color=Cyan>)</font>+<a name="(line613)"></a>+<a name="(line614)"></a><a name="attr2str"></a>attr2str <font color=Red>::</font> AttValue <font color=Red>-></font> String <font color=Blue>-- really needs symbol table</font>+<a name="(line615)"></a>attr2str <font color=Cyan>(</font>AttValue xs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line616)"></a> <font color=Green><u>let</u></font> f <font color=Cyan>(</font>Left s<font color=Cyan>)</font> <font color=Red>=</font> s+<a name="(line617)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>chr i<font color=Red>]</font>+<a name="(line618)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"\""</font>+<a name="(line619)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&"</font>+<a name="(line620)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"<"</font>+<a name="(line621)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>">"</font>+<a name="(line622)"></a> f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"'"</font>+<a name="(line623)"></a> f <font color=Cyan>(</font>Right <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"*"</font> <font color=Blue>-- Ooops, ST needed here.</font>+<a name="(line624)"></a> <font color=Green><u>in</u></font> concatMap f xs+<a name="(line625)"></a>+<a name="(line626)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line627)"></a><font color=Blue>-- New content-model types</font>+<a name="(line628)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line629)"></a>+<a name="(line630)"></a><font color=Blue>{-+<a name="(line631)"></a>data OneOf2 a b+<a name="(line632)"></a>data OneOf3 a b c+<a name="(line633)"></a>data OneOf4 a b c d+<a name="(line634)"></a> ... etc are now defined (with instances) in module OneOfN.+<a name="(line635)"></a>-}</font>+<a name="(line636)"></a>+<a name="(line637)"></a><a name="ANYContent"></a><font color=Blue>-- | A type corresponding to XML's ANY contentspec.</font>+<a name="(line638)"></a><a name="ANYContent"></a><font color=Blue>-- It is either a list of unconverted xml 'Content'</font>+<a name="(line639)"></a><a name="ANYContent"></a><font color=Blue>-- or some 'XmlContent'-able value.</font>+<a name="(line640)"></a><a name="ANYContent"></a><font color=Blue>--</font>+<a name="(line641)"></a><a name="ANYContent"></a><font color=Blue>-- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.</font>+<a name="(line642)"></a><a name="ANYContent"></a><font color=Blue>-- Note: The Show instance for 'UnConverted' uses 'verbatim'.</font>+<a name="(line643)"></a><a name="ANYContent"></a><font color=Green><u>data</u></font> ANYContent <font color=Red>=</font> <font color=Green><u>forall</u></font> a <font color=Cyan>.</font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> Show a<font color=Cyan>)</font> <font color=Red>=></font> ANYContent a+<a name="(line644)"></a> <font color=Red>|</font> UnConverted <font color=Red>[</font>Content Posn<font color=Red>]</font>+<a name="(line645)"></a>+<a name="(line646)"></a><font color=Green><u>instance</u></font> Show ANYContent <font color=Green><u>where</u></font>+<a name="(line647)"></a> show <font color=Cyan>(</font>UnConverted c<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"UnConverted "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show <font color=Cyan>$</font> map verbatim c<font color=Cyan>)</font>+<a name="(line648)"></a> show <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"ANYContent "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show a<font color=Cyan>)</font>+<a name="(line649)"></a>+<a name="(line650)"></a><font color=Green><u>instance</u></font> Eq ANYContent <font color=Green><u>where</u></font>+<a name="(line651)"></a> a <font color=Cyan>==</font> b <font color=Red>=</font> show a <font color=Cyan>==</font> show b+<a name="(line652)"></a>+<a name="(line653)"></a><a name="List1"></a><font color=Blue>-- | The List1 type represents lists with at least one element.</font>+<a name="(line654)"></a><a name="List1"></a><font color=Blue>-- It is required for DTD content models that use + as a modifier.</font>+<a name="(line655)"></a><a name="List1"></a><font color=Green><u>data</u></font> List1 a <font color=Red>=</font> NonEmpty <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font> Show<font color=Cyan>)</font>+<a name="(line656)"></a>+<a name="(line657)"></a>+<a name="(line658)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line659)"></a><font color=Blue>-- Instances for new content-model types</font>+<a name="(line660)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line661)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=></font> HTypeable <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line662)"></a> toHType m <font color=Red>=</font> Defined <font color=Magenta>"List1"</font> <font color=Red>[</font>hx<font color=Red>]</font>+<a name="(line663)"></a> <font color=Red>[</font>Constr <font color=Magenta>"NonEmpty"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>List hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>+<a name="(line664)"></a> <font color=Green><u>where</u></font> <font color=Cyan>(</font>NonEmpty x<font color=Cyan>)</font> <font color=Red>=</font> m+<a name="(line665)"></a> hx <font color=Red>=</font> toHType x+<a name="(line666)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=></font> XmlContent <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line667)"></a> toContents <font color=Cyan>(</font>NonEmpty xs<font color=Cyan>)</font> <font color=Red>=</font> concatMap toContents xs+<a name="(line668)"></a> parseContents <font color=Red>=</font> fmap NonEmpty <font color=Cyan>$</font> many1 parseContents+<a name="(line669)"></a>+<a name="(line670)"></a><font color=Green><u>instance</u></font> HTypeable ANYContent <font color=Green><u>where</u></font>+<a name="(line671)"></a> toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Prim <font color=Magenta>"ANYContent"</font> <font color=Magenta>"ANY"</font>+<a name="(line672)"></a><font color=Green><u>instance</u></font> XmlContent ANYContent <font color=Green><u>where</u></font>+<a name="(line673)"></a> toContents <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font> <font color=Red>=</font> toContents a+<a name="(line674)"></a> toContents <font color=Cyan>(</font>UnConverted s<font color=Cyan>)</font> <font color=Red>=</font> map <font color=Cyan>(</font>fmap <font color=Cyan>(</font>const ()<font color=Cyan>)</font><font color=Cyan>)</font> s+<a name="(line675)"></a> parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs <font color=Red>-></font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>UnConverted cs<font color=Cyan>)</font><font color=Cyan>,</font> []<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line676)"></a>+<a name="(line677)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line678)"></a><font color=Blue>--</font>+<a name="(line679)"></a><font color=Blue>------------------------------------------------------------------------</font> </pre> </html>
docs/changelog.html view
@@ -20,7 +20,9 @@ in the XtractLazy tool. <li> Version 1.19.2 updates the Cabal file to enable HaXml to build with both ghc-6.6.x and ghc-6.8.x.-+<li> Version 1.19.3 fixes an incompatibility with some versions of the+ Bytestring package. Also has a bugfix in the DTD validator, and+ adds some new utility functions in Text.XML.HaXml.Util. </ul> <h3>Changes in 1.18</h3>
docs/index.html view
@@ -132,10 +132,11 @@ <center><h3><a name="download">Downloads</a></h3></center> <p> <b>Development versions:</b><br>-HaXml-1.19.2, release date 2008.01.14<br>+HaXml-1.19.3, release date 2008.06.17<br>+From <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HaXml">Hackage</a><br> By HTTP:-<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.2.tar.gz">.tar.gz</a>,-<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.2.zip">.zip</a>.+<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.3.tar.gz">.tar.gz</a>,+<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.3.zip">.zip</a>. <br> By FTP: <a href="ftp://ftp.cs.york.ac.uk/pub/haskell/HaXml/">@@ -202,6 +203,8 @@ <center><h3><a name="news">Recent news</a></h3></center> <p>+Version 1.19.3 has some minor bugfixes to increase compatibility with the+ByteString package.<br> Version 1.19.2 updates the Cabal file to enable HaXml to build with both ghc-6.6.x and ghc-6.8.x.<br> Version 1.19.1 fixes a build error in 1.19.<br>
src/Makefile view
@@ -1,5 +1,5 @@ SOFTWARE = HaXml-VERSION = 1.19.2+VERSION = 1.19.3 LIBSRCS = \ Text/XML/HaXml.hs Text/XML/HaXml/Combinators.hs Text/XML/HaXml/Lex.hs \
src/Text/XML/HaXml/ByteStringPP.hs view
@@ -22,51 +22,55 @@ import Prelude hiding (maybe,either,elem,concat) import Maybe hiding (maybe)-import Data.List (intersperse) +import Data.List (intersperse) --import Data.ByteString.Lazy hiding (pack,map,head,any,singleton,intersperse,join)-import Data.ByteString.Lazy.Char8 (ByteString(), concat, pack, singleton, join+import Data.ByteString.Lazy.Char8 (ByteString(), concat, pack, singleton, intercalate , append, elem, empty) import Text.XML.HaXml.Types -either f g (Left x) = f x-either f g (Right x) = g x+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1+either f _ (Left x) = f x+either _ g (Right x) = g x -maybe f Nothing = empty+maybe :: (t -> ByteString) -> Maybe t -> ByteString+maybe _ Nothing = empty maybe f (Just x) = f x -- A simple implementation of the pretty-printing combinator interface, -- but for plain ByteStrings:-infixl 6 <> +infixl 6 <> infixl 6 <+>-infixl 5 $$, $+$+infixl 5 $$ (<>) :: ByteString -> ByteString -> ByteString -- Beside-hcat :: [ByteString] -> ByteString -- List version of <>+hcat :: [ByteString] -> ByteString -- List version of <> (<+>) :: ByteString -> ByteString -> ByteString -- Beside, separated by space-hsep :: [ByteString] -> ByteString -- List version of <+>+hsep :: [ByteString] -> ByteString -- List version of <+> ($$) :: ByteString -> ByteString -> ByteString -- Above; if there is no -- overlap, it "dovetails" vcat :: [ByteString] -> ByteString -- List version of $$-cat :: [ByteString] -> ByteString -- Either hcat or vcat+-- cat :: [ByteString] -> ByteString -- Either hcat or vcat sep :: [ByteString] -> ByteString -- Either hsep or vcat-fcat :: [ByteString] -> ByteString -- ``Paragraph fill'' version of cat+-- fcat :: [ByteString] -> ByteString -- ``Paragraph fill'' version of cat fsep :: [ByteString] -> ByteString -- ``Paragraph fill'' version of sep nest :: Int -> ByteString -> ByteString -- Nested (<>) b1 b2 = b1 `append` b2 (<+>) b1 b2 = b1 <> pack " " <> b2 ($$) b1 b2 = b1 <> pack "\n" <> b2-($+$) = ($$)+-- ($+$) = ($$) -hcat = Data.ByteString.Lazy.Char8.concat -hsep = Data.ByteString.Lazy.Char8.join (singleton ' ')-vcat = Data.ByteString.Lazy.Char8.join (singleton '\n')-cat = hcat+hcat = Data.ByteString.Lazy.Char8.concat+hsep = Data.ByteString.Lazy.Char8.intercalate (singleton ' ')+vcat = Data.ByteString.Lazy.Char8.intercalate (singleton '\n')+_ = hcat sep = hsep+text :: [Char] -> ByteString text = pack-fcat = cat+-- _ = cat fsep = sep nest _ b = pack " " <> b+parens :: ByteString -> ByteString parens p = pack "(" <> p <> pack ")" @@ -82,8 +86,8 @@ doctypedecl :: DocTypeDecl -> ByteString markupdecl :: MarkupDecl -> ByteString-extsubset :: ExtSubset -> ByteString-extsubsetdecl :: ExtSubsetDecl -> ByteString+-- extsubset :: ExtSubset -> ByteString+-- extsubsetdecl :: ExtSubsetDecl -> ByteString cp :: CP -> ByteString element :: Element i -> ByteString@@ -105,7 +109,7 @@ misc (PI (n,s)) = text "<?" <> text n <+> text s <+> text "?>" sddecl sd | sd = text "standalone='yes'" | otherwise = text "standalone='no'"-doctypedecl (DTD n eid ds) = if Prelude.null ds then +doctypedecl (DTD n eid ds) = if Prelude.null ds then hd <> text ">" else hd <+> text " [" $$ vcat (Prelude.map markupdecl ds) $$ text "]>"@@ -117,10 +121,10 @@ markupdecl (Notation n) = notationdecl n markupdecl (MarkupMisc m) = misc m --markupdecl (MarkupPE p m) = peref p-extsubset (ExtSubset t ds) = maybe textdecl t $$- vcat (Prelude.map extsubsetdecl ds)-extsubsetdecl (ExtMarkupDecl m) = markupdecl m-extsubsetdecl (ExtConditionalSect c) = conditionalsect c+-- _ (ExtSubset t ds) = maybe textdecl t $$+-- vcat (Prelude.map extsubsetdecl ds)+-- _ (ExtMarkupDecl m) = markupdecl m+-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c --extsubsetdecl (ExtPEReference p e) = peref p element (Elem n as []) = text "<" <> text n <+>@@ -135,15 +139,17 @@ | otherwise = let (d,c) = carryelem e empty in d <> c +isText :: Content t -> Bool isText (CString _ _ _) = True isText (CRef _ _) = True isText _ = False +carryelem :: Element t -> ByteString -> (ByteString, ByteString) carryelem (Elem n as []) c = ( c <> text "<" <> text n <+> fsep (Prelude.map attribute as) , text "/>")-carryelem e@(Elem n as cs) c+carryelem (Elem n as cs) c -- | any isText cs = ( c <> element e, empty) | otherwise = let (cs0,d0) = carryscan carrycontent cs (text ">") in@@ -152,6 +158,7 @@ nest 2 (vcat cs0) <> --- $$ d0 <> text "</" <> text n , text ">")+carrycontent :: Content t -> ByteString -> (ByteString, ByteString) carrycontent (CElem e _) c = carryelem e c carrycontent (CString False s _) c = (c <> chardata s, empty) carrycontent (CString True s _) c = (c <> cdsect s, empty)@@ -159,7 +166,7 @@ carrycontent (CMisc m _) c = (c <> misc m, empty) carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)-carryscan f [] c = ([],c)+carryscan _ [] c = ([],c) carryscan f (a:as) c = let (b, c0) = f a c (bs,c1) = carryscan f as c0 in (b:bs, c1)@@ -189,8 +196,10 @@ content (CRef r _) = reference r content (CMisc m _) = misc m +elementdecl :: ElementDecl -> ByteString elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+> contentspec cs <> text ">"+contentspec :: ContentSpec -> ByteString contentspec EMPTY = text "EMPTY" contentspec ANY = text "ANY" contentspec (Mixed m) = mixed m@@ -202,21 +211,27 @@ cp (Seq cs m) = parens (hcat (intersperse (text ",") (Prelude.map cp cs))) <> modifier m --cp (CPPE p c) = peref p+modifier :: Modifier -> ByteString modifier None = empty modifier Query = text "?" modifier Star = text "*" modifier Plus = text "+"+mixed :: Mixed -> ByteString mixed PCDATA = text "(#PCDATA)" mixed (PCDATAplus ns) = text "(#PCDATA |" <+> hcat (intersperse (text "|") (Prelude.map text ns)) <> text ")*" +attlistdecl :: AttListDecl -> ByteString attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+> fsep (Prelude.map attdef ds) <> text ">"+attdef :: AttDef -> ByteString attdef (AttDef n t d) = text n <+> atttype t <+> defaultdecl d+atttype :: AttType -> ByteString atttype StringType = text "CDATA" atttype (TokenizedType t) = tokenizedtype t atttype (EnumeratedType t) = enumeratedtype t+tokenizedtype :: TokenizedType -> ByteString tokenizedtype ID = text "ID" tokenizedtype IDREF = text "IDREF" tokenizedtype IDREFS = text "IDREFS"@@ -224,75 +239,102 @@ tokenizedtype ENTITIES = text "ENTITIES" tokenizedtype NMTOKEN = text "NMTOKEN" tokenizedtype NMTOKENS = text "NMTOKENS"+enumeratedtype :: EnumeratedType -> ByteString enumeratedtype (NotationType n)= notationtype n enumeratedtype (Enumeration e) = enumeration e+notationtype :: [[Char]] -> ByteString notationtype ns = text "NOTATION" <+> parens (hcat (intersperse (text "|") (Prelude.map text ns)))+enumeration :: [[Char]] -> ByteString enumeration ns = parens (hcat (intersperse (text "|") (Prelude.map nmtoken ns)))+defaultdecl :: DefaultDecl -> ByteString defaultdecl REQUIRED = text "#REQUIRED" defaultdecl IMPLIED = text "#IMPLIED" defaultdecl (DefaultTo a f) = maybe (const (text "#FIXED")) f <+> attvalue a-conditionalsect (IncludeSect i)= text "<![INCLUDE [" <+>- vcat (Prelude.map extsubsetdecl i) <+> text "]]>"-conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>- fsep (Prelude.map ignoresectcontents i) <+> text "]]>"-ignore (Ignore) = empty-ignoresectcontents (IgnoreSectContents i is)- = ignore i <+> vcat (Prelude.map internal is)- where internal (ics,i) = text "<![[" <+>- ignoresectcontents ics <+>- text "]]>" <+> ignore i+--_ (IncludeSect i)= text "<![INCLUDE [" <+>+-- vcat (Prelude.map extsubsetdecl i) <+> text "]]>"+-- conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>+-- fsep (Prelude.map ignoresectcontents i) <+> text "]]>"+-- -- _ (Ignore) = empty+-- ignoresectcontents :: IgnoreSectContents -> ByteString+-- _ (IgnoreSectContents i is)+-- = ignore i <+> vcat (Prelude.map internal is)+-- where internal (ics,i) = text "<![[" <+>+-- ignoresectcontents ics <+>+-- text "]]>" <+> ignore i+reference :: Reference -> ByteString reference (RefEntity er) = entityref er reference (RefChar cr) = charref cr+entityref :: [Char] -> ByteString entityref n = text "&" <> text n <> text ";"+charref :: (Show a) => a -> ByteString charref c = text "&#" <> text (show c) <> text ";"+entitydecl :: EntityDecl -> ByteString entitydecl (EntityGEDecl d) = gedecl d entitydecl (EntityPEDecl d) = pedecl d+gedecl :: GEDecl -> ByteString gedecl (GEDecl n ed) = text "<!ENTITY" <+> text n <+> entitydef ed <> text ">"+pedecl :: PEDecl -> ByteString pedecl (PEDecl n pd) = text "<!ENTITY %" <> text n <+> pedef pd <> text ">"-entitydef (DefEntityValue ev) = entityvalue ev+entitydef :: EntityDef -> ByteString+entitydef (DefEntityValue ew) = entityvalue ew entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd-pedef (PEDefEntityValue ev) = entityvalue ev+pedef :: PEDef -> ByteString+pedef (PEDefEntityValue ew) = entityvalue ew pedef (PEDefExternalID eid) = externalid eid+externalid :: ExternalID -> ByteString externalid (SYSTEM sl) = text "SYSTEM" <+> systemliteral sl externalid (PUBLIC i sl) = text "PUBLIC" <+> pubidliteral i <+> systemliteral sl+ndatadecl :: NDataDecl -> ByteString ndatadecl (NDATA n) = text "NDATA" <+> text n-textdecl (TextDecl vi ed) = text "<?xml" <+> maybe text vi <+>- encodingdecl ed <> text "?>"-extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c-extpe (ExtPE t esd) = maybe textdecl t <+>- vcat (Prelude.map extsubsetdecl esd)+-- _ (TextDecl vi ed) = text "<?xml" <+> maybe text vi <+>+-- encodingdecl ed <> text "?>"+-- extparsedent :: ExtParsedEnt t -> ByteString+-- _ (ExtParsedEnt t c)= maybe textdecl t <+> content c+-- _ (ExtPE t esd) = maybe textdecl t <+>+-- vcat (Prelude.map extsubsetdecl esd)+notationdecl :: NotationDecl -> ByteString notationdecl (NOTATION n e) = text "<!NOTATION" <+> text n <+> either externalid publicid e <> text ">"+publicid :: PublicID -> ByteString publicid (PUBLICID p) = text "PUBLICID" <+> pubidliteral p+encodingdecl :: EncodingDecl -> ByteString encodingdecl (EncodingDecl s) = text "encoding='" <> text s <> text "'"+nmtoken :: [Char] -> ByteString nmtoken s = text s+attvalue :: AttValue -> ByteString attvalue (AttValue esr) = text "\"" <> hcat (Prelude.map (either text reference) esr) <> text "\""+entityvalue :: EntityValue -> ByteString entityvalue (EntityValue evs) | containsDoubleQuote evs = text "'" <> hcat (Prelude.map ev evs) <> text "'" | otherwise = text "\"" <> hcat (Prelude.map ev evs) <> text "\""+ev :: EV -> ByteString ev (EVString s) = text s --ev (EVPERef p e) = peref p ev (EVRef r) = reference r+pubidliteral :: PubidLiteral -> ByteString pubidliteral (PubidLiteral s) | toWord8 '"' `elem` (pack s) = text "'" <> text s <> text "'" | otherwise = text "\"" <> text s <> text "\""+systemliteral :: SystemLiteral -> ByteString systemliteral (SystemLiteral s) | toWord8 '"' `elem` (pack s) = text "'" <> text s <> text "'" | otherwise = text "\"" <> text s <> text "\""+chardata, cdsect :: [Char] -> ByteString chardata s = {-if all isSpace s then empty else-} text s cdsect c = text "<![CDATA[" <> chardata c <> text "]]>" ---toWord8 :: Char -> Word8+-- toWord8 :: Char -> Word8+toWord8 :: (Enum a, Enum a1) => a1 -> a toWord8 = toEnum . fromEnum -----+containsDoubleQuote :: [EV] -> Bool containsDoubleQuote evs = any csq evs where csq (EVString s) = toWord8 '"' `elem` (pack s) csq _ = False
src/Text/XML/HaXml/DtdToHaskell/Convert.hs view
@@ -13,7 +13,7 @@ ---- Internal representation for database of DTD decls ---- data Record = R [AttDef] ContentSpec-type Db = [(String,Record)]+-- type Db = [(String,Record)] ---- Build a database of DTD decls then convert them to typedefs ----@@ -21,7 +21,7 @@ ---- Apparently multiple ATTLIST decls for the same element are permitted, ---- although only one ELEMENT decl for it is allowed. dtd2TypeDef :: [MarkupDecl] -> [TypeDef]-dtd2TypeDef mds = +dtd2TypeDef mds = (concatMap convert . reverse . database []) mds where database db [] = db@@ -38,7 +38,7 @@ -- (MarkupPE _ m') -> database db (m':ms) _ -> database db ms - replace n v [] = error "dtd2TypeDef.replace: no element to replace"+ replace _ _ [] = error "dtd2TypeDef.replace: no element to replace" replace n v (x@(n0,_):db) | n==n0 = (n,v): db | otherwise = x: replace n v db@@ -86,8 +86,8 @@ mkData [ts] fs aux n = [DataDef aux n fs [(n, ts)]] mkData tss fs aux n = [DataDef aux n fs (map (mkConstr n) tss)] where- mkConstr n ts = (mkConsName n ts, ts)- mkConsName (Name x n) sts = Name x (n++concat (intersperse "_" (map flatten sts)))+ mkConstr m ts = (mkConsName m ts, ts)+ mkConsName (Name x m) sts = Name x (m++concat (intersperse "_" (map flatten sts))) flatten (Maybe st) = {-"Maybe_" ++ -} flatten st flatten (List st) = {-"List_" ++ -} flatten st flatten (List1 st) = {-"List1_" ++ -} flatten st@@ -97,15 +97,16 @@ flatten (OneOf sts) = {-"OneOf" ++ show (length sts) ++ "_" ++ -} concat (intersperse "_" (map flatten sts)) flatten Any = "Any"- flatten (Defined (Name _ n)) = n+ flatten (Defined (Name _ m)) = m -mkAttrDef e (AttDef n StringType def) =+mkAttrDef :: String -> AttDef -> [TypeDef]+mkAttrDef _ (AttDef _ StringType _) = []-mkAttrDef e (AttDef n (TokenizedType t) def) =+mkAttrDef _ (AttDef _ (TokenizedType _) _) = [] -- mkData [[String]] [] False (name n)-mkAttrDef e (AttDef n (EnumeratedType (NotationType nt)) def) =+mkAttrDef e (AttDef n (EnumeratedType (NotationType nt)) _) = [EnumDef (name_a e n) (map (name_ac e n) nt)]-mkAttrDef e (AttDef n (EnumeratedType (Enumeration es)) def) =+mkAttrDef e (AttDef n (EnumeratedType (Enumeration es)) _) = [EnumDef (name_a e n) (map (name_ac e n) es)] -- Default attribute values not handled here @@ -114,13 +115,13 @@ where mkType StringType REQUIRED = String mkType StringType IMPLIED = Maybe String- mkType StringType (DefaultTo v@(AttValue _) f) = Defaultable String (show v)+ mkType StringType (DefaultTo v@(AttValue _) _) = Defaultable String (show v) mkType (TokenizedType _) REQUIRED = String mkType (TokenizedType _) IMPLIED = Maybe String- mkType (TokenizedType _) (DefaultTo v@(AttValue _) f) =- Defaultable String (show v)+ mkType (TokenizedType _) (DefaultTo v@(AttValue _) _) =+ Defaultable String (show v) mkType (EnumeratedType _) REQUIRED = Defined (name_a e n) mkType (EnumeratedType _) IMPLIED = Maybe (Defined (name_a e n))- mkType (EnumeratedType _) (DefaultTo v@(AttValue _) f) =- Defaultable (Defined (name_a e n)) (hName (name_ac e n (show v)))+ mkType (EnumeratedType _) (DefaultTo v@(AttValue _) _) =+ Defaultable (Defined (name_a e n)) (hName (name_ac e n (show v)))
src/Text/XML/HaXml/DtdToHaskell/Instance.hs view
@@ -12,8 +12,8 @@ mkInstance :: TypeDef -> Doc -- no constructors - represents an element with empty content but attributes.-mkInstance (DataDef aux n fs []) =- let (frpat, frattr, topat, toattr) = attrpats fs+mkInstance (DataDef _ n fs []) =+ let (_, frattr, topat, toattr) = attrpats fs frretval = if null fs then ppHName n else frattr topatval = if null fs then ppHName n else topat in@@ -81,9 +81,9 @@ -- multiple constructors (real) mkInstance (DataDef False n fs cs) =- let vs = nameSupply cs+ let _ = nameSupply cs (frpat, frattr, topat, toattr) = attrpats fs- mixattrs = if null fs then False else True+ _ = if null fs then False else True in text "instance HTypeable" <+> ppHName n <+> text "where" $$ nest 4 ( text "toHType x = Defined \"" <> ppXName n <> text "\" [] []" )@@ -108,8 +108,8 @@ -- multiple constructors (auxiliary) mkInstance (DataDef True n fs cs) =- let vs = nameSupply cs- (frpat, frattr, topat, toattr) = attrpats fs+ let _ = nameSupply cs+ (_, frattr, _, _) = attrpats fs mixattrs = if null fs then False else True in text "instance HTypeable" <+> ppHName n <+> text "where" $$@@ -143,7 +143,7 @@ data SameName = Same | Extended mkInstanceAttrs :: SameName -> Name -> AttrFields -> Doc-mkInstanceAttrs s n [] = empty+mkInstanceAttrs _ _ [] = empty mkInstanceAttrs s n fs = let ppName = case s of { Same-> ppHName; Extended-> ppAName; } in@@ -170,46 +170,46 @@ -mkFrElem :: Name -> [StructType] -> [Doc] -> Doc -> Doc-mkFrElem n sts vs inner =- foldr (frElem n) inner (zip3 sts vs cvs)- where- cvs = let ns = nameSupply2 vs- in zip ns (text "c0": init ns)- frElem n (st,v,(cvi,cvo)) inner =- parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$- nest 2 inner) $$- parens (- case st of- (Maybe String) -> text "fromText" <+> cvo- (Maybe s) -> text "fromElem" <+> cvo- (List String) -> text "many fromText" <+> cvo- (List s) -> text "many fromElem" <+> cvo- (List1 s) -> text "definite fromElem"- <+> text "\"" <> text (show s)<> text "+\""- <+> text "\"" <> ppXName n <> text "\""- <+> cvo- (Tuple ss) -> text "definite fromElem"- <+> text "\"(" <> hcat (intersperse (text ",")- (map (text.show) ss))- <> text ")\""- <+> text "\"" <> ppXName n <> text "\""- <+> cvo- (OneOf ss) -> text "definite fromElem"- <+> text "\"OneOf\""- <+> text "\"" <> ppXName n <> text "\""- <+> cvo- (String) -> text "definite fromText" <+> text "\"text\" \"" <>- ppXName n <> text "\"" <+> cvo- (Any) -> text "definite fromElem" <+> text "\"ANY\" \"" <>- ppXName n <> text "\"" <+> cvo- (Defined m) -> text "definite fromElem" <+>- text "\"<" <> ppXName m <> text ">\" \"" <>- ppXName n <> text "\"" <+> cvo- (Defaultable _ _) -> text "nyi_fromElem_Defaultable" <+> cvo- )+-- mkFrElem :: Name -> [StructType] -> [Doc] -> Doc -> Doc+-- mkFrElem n sts vs inner =+-- foldr (frElem n) inner (zip3 sts vs cvs)+-- where+-- cvs = let ns = nameSupply2 vs+-- in zip ns (text "c0": init ns)+-- frElem _ (st,v,(cvi,cvo)) inner =+-- parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$+-- nest 2 inner) $$+-- parens (+-- case st of+-- (Maybe String) -> text "fromText" <+> cvo+-- (Maybe _) -> text "fromElem" <+> cvo+-- (List String) -> text "many fromText" <+> cvo+-- (List _) -> text "many fromElem" <+> cvo+-- (List1 s) -> text "definite fromElem"+-- <+> text "\"" <> text (show s)<> text "+\""+-- <+> text "\"" <> ppXName n <> text "\""+-- <+> cvo+-- (Tuple ss) -> text "definite fromElem"+-- <+> text "\"(" <> hcat (intersperse (text ",")+-- (map (text.show) ss))+-- <> text ")\""+-- <+> text "\"" <> ppXName n <> text "\""+-- <+> cvo+-- (OneOf _) -> text "definite fromElem"+-- <+> text "\"OneOf\""+-- <+> text "\"" <> ppXName n <> text "\""+-- <+> cvo+-- (String) -> text "definite fromText" <+> text "\"text\" \"" <>+-- ppXName n <> text "\"" <+> cvo+-- (Any) -> text "definite fromElem" <+> text "\"ANY\" \"" <>+-- ppXName n <> text "\"" <+> cvo+-- (Defined m) -> text "definite fromElem" <+>+-- text "\"<" <> ppXName m <> text ">\" \"" <>+-- ppXName m <> text "\"" <+> cvo+-- (Defaultable _ _) -> text "nyi_fromElem_Defaultable" <+> cvo+-- ) --- +-- {- mkParseContents :: Name -> [StructType] -> [Doc] -> Doc -> Doc mkParseContents n sts vs inner =@@ -223,24 +223,25 @@ parens ( ) -}-+mkParseConstr :: Doc -> (Name, [StructType]) -> Doc mkParseConstr frattr (c,sts) = fsep (text "return" <+> parens (ppHName c <+> frattr) : map mkParseContents sts) +mkParseContents :: StructType -> Doc mkParseContents st = let ap = text "`apply`" in case st of (Maybe String) -> ap <+> text "optional text"- (Maybe s) -> ap <+> text "optional parseContents"+ (Maybe _) -> ap <+> text "optional parseContents" (List String) -> ap <+> text "many text"- (List s) -> ap <+> text "many parseContents"- (List1 s) -> ap <+> text "parseContents"- (Tuple ss) -> ap <+> text "parseContents"- (OneOf ss) -> ap <+> text "parseContents"+ (List _) -> ap <+> text "many parseContents"+ (List1 _) -> ap <+> text "parseContents"+ (Tuple _) -> ap <+> text "parseContents"+ (OneOf _) -> ap <+> text "parseContents" (String) -> ap <+> text "(text `onFail` return \"\")" (Any) -> ap <+> text "parseContents"- (Defined m) -> ap <+> text "parseContents"+ (Defined _) -> ap <+> text "parseContents" (Defaultable _ _) -> ap <+> text "nyi_fromElem_Defaultable" --@@ -252,27 +253,27 @@ toElem st v = case st of (Maybe String) -> text "maybe [] toText" <+> v- (Maybe s) -> text "maybe [] toContents" <+> v+ (Maybe _) -> text "maybe [] toContents" <+> v (List String) -> text "concatMap toText" <+> v- (List s) -> text "concatMap toContents" <+> v- (List1 s) -> text "toContents" <+> v- (Tuple ss) -> text "toContents" <+> v- (OneOf ss) -> text "toContents" <+> v+ (List _) -> text "concatMap toContents" <+> v+ (List1 _) -> text "toContents" <+> v+ (Tuple _) -> text "toContents" <+> v+ (OneOf _) -> text "toContents" <+> v (String) -> text "toText" <+> v (Any) -> text "toContents" <+> v- (Defined m) -> text "toContents" <+> v+ (Defined _) -> text "toContents" <+> v (Defaultable _ _) -> text "nyi_toElem_Defaultable" <+> v -mkRpat :: [Doc] -> Doc-mkRpat [v] = v-mkRpat vs = (parens . hcat . intersperse comma) vs+-- mkRpat :: [Doc] -> Doc+-- mkRpat [v] = v+-- mkRpat vs = (parens . hcat . intersperse comma) vs mkCpat :: Name -> Doc -> [Doc] -> Doc mkCpat n i vs = ppHName n <+> i <+> fsep vs -nameSupply,nameSupply2 :: [b] -> [Doc]+nameSupply :: [b] -> [Doc] nameSupply ss = take (length ss) (map char ['a'..])-nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v <- ['a'..]]+-- nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v <- ['a'..]] mkTranslate :: [Name] -> Doc mkTranslate es =@@ -282,6 +283,7 @@ trans n = text "translate \"" <> ppXName n <> text "\" =" <+> text "Just" <+> ppHName n +mkToAttr :: Name -> Doc mkToAttr n = text "toAttrFrTyp n" <+> ppHName n <+> text "=" <+> text "Just (n, str2attr" <+> doubleQuotes (ppXName n) <> text ")" @@ -290,14 +292,14 @@ ppHName n <+> text "=" <+> ( case st of (Defaultable String s) -> text "defaultA fromAttrToStr" <+>- doubleQuotes (text s)+ doubleQuotes (text s) (Defaultable _ s) -> text "defaultA fromAttrToTyp" <+> text s (Maybe String) -> text "possibleA fromAttrToStr" (Maybe _) -> text "possibleA fromAttrToTyp" String -> text "definiteA fromAttrToStr" <+>- doubleQuotes (ppXName tag)+ doubleQuotes (ppXName tag) _ -> text "definiteA fromAttrToTyp" <+>- doubleQuotes (ppXName tag)+ doubleQuotes (ppXName tag) ) <+> doubleQuotes (ppXName n) <+> text "as" mkToFld :: (Name,StructType) -> Doc@@ -311,67 +313,67 @@ _ -> text "toAttrFrTyp" ) <+> doubleQuotes (ppXName n) <+> parens (ppHName n <+> text "v") -mkFrAux :: Bool -> Doc -> [(Name,[StructType])] -> Doc-mkFrAux keeprest attrs cs = foldr frAux inner cs- where- inner = text "(Nothing, c0)"- rest = if keeprest then text "rest" else text "_"- frAux (n,sts) inner =- let vs = nameSupply sts in- nest 4 (text "case" <+> blah sts vs <+> text "of" $$- succpat sts vs <+> text "-> (Just" <+>- parens (mkCpat n attrs vs) <> text ", rest)"- $$- failpat sts <+> text "->" $$ nest 4 inner- )- blah [st] [v] =- blahblahblah st (text "c0")- blah sts vs =- let ns = nameSupply2 vs- cvs = zip ns (text "c0": init ns)- blahblah (st,v,(cvi,cvo)) inner =- parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$- nest 2 inner) $$- blahblahblah st cvo- in- foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)- blahblahblah st cvo = parens (- case st of- (Maybe String) -> text "fromText" <+> cvo- (Maybe s) -> text "fromElem" <+> cvo- (List String) -> text "many fromText" <+> cvo- (List s) -> text "many fromElem" <+> cvo- (List1 s) -> text "fromElem" <+> cvo- (Tuple ss) -> text "fromElem" <+> cvo -- ??- (OneOf ss) -> text "fromElem" <+> cvo- (String) -> text "fromText" <+> cvo- (Any) -> text "fromElem" <+> cvo- (Defined m) -> text "fromElem" <+> cvo- )- failpat sts =- let fp st =- case st of- (Maybe s) -> text "Nothing"- (List s) -> text "[]"- (List1 s) -> text "_"- (Tuple ss) -> text "_"- (OneOf ss) -> text "_"- (String) -> text "_"- (Any) -> text "_"- (Defined m) -> text "_"- in parens (hcat (intersperse comma (map fp sts++[text "_"])))- succpat sts vs =- let sp st v =- case st of- (Maybe s) -> v- (List s) -> v- (List1 s) -> text "Just" <+> v- (Tuple ss) -> text "Just" <+> v- (OneOf ss) -> text "Just" <+> v- (String) -> text "Just" <+> v- (Any) -> text "Just" <+> v- (Defined m) -> text "Just" <+> v- in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))+-- mkFrAux :: Bool -> Doc -> [(Name,[StructType])] -> Doc+-- mkFrAux keeprest attrs cs = foldr frAux inner cs+-- where+-- inner = text "(Nothing, c0)"+-- rest = if keeprest then text "rest" else text "_"+-- frAux (n,sts) innr =+-- let vs = nameSupply sts in+-- nest 4 (text "case" <+> blah sts vs <+> text "of" $$+-- succpat sts vs <+> text "-> (Just" <+>+-- parens (mkCpat n attrs vs) <> text ", rest)"+-- $$+-- failpat sts <+> text "->" $$ nest 4 innr+-- )+-- blah [st] [_] =+-- blahblahblah st (text "c0")+-- blah sts vs =+-- let ns = nameSupply2 vs+-- cvs = zip ns (text "c0": init ns)+-- blahblah (st,v,(cvi,cvo)) innr =+-- parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$+-- nest 2 innr) $$+-- blahblahblah st cvo+-- in+-- foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)+-- blahblahblah st cvo = parens (+-- case st of+-- (Maybe String) -> text "fromText" <+> cvo+-- (Maybe _) -> text "fromElem" <+> cvo+-- (List String) -> text "many fromText" <+> cvo+-- (List _) -> text "many fromElem" <+> cvo+-- (List1 _) -> text "fromElem" <+> cvo+-- (Tuple _) -> text "fromElem" <+> cvo -- ??+-- (OneOf _) -> text "fromElem" <+> cvo+-- (String) -> text "fromText" <+> cvo+-- (Any) -> text "fromElem" <+> cvo+-- (Defined _) -> text "fromElem" <+> cvo+-- )+-- failpat sts =+-- let fp st =+-- case st of+-- (Maybe _) -> text "Nothing"+-- (List _) -> text "[]"+-- (List1 _) -> text "_"+-- (Tuple _) -> text "_"+-- (OneOf _) -> text "_"+-- (String) -> text "_"+-- (Any) -> text "_"+-- (Defined _) -> text "_"+-- in parens (hcat (intersperse comma (map fp sts++[text "_"])))+-- succpat sts vs =+-- let sp st v =+-- case st of+-- (Maybe _) -> v+-- (List _) -> v+-- (List1 _) -> text "Just" <+> v+-- (Tuple _) -> text "Just" <+> v+-- (OneOf _) -> text "Just" <+> v+-- (String) -> text "Just" <+> v+-- (Any) -> text "Just" <+> v+-- (Defined _) -> text "Just" <+> v+-- in parens (hcat (intersperse comma (zipWith sp sts vs++[rest]))) mkToAux :: Bool -> (Name,[StructType]) -> Doc mkToAux mixattrs (n,sts) =
src/Text/XML/HaXml/DtdToHaskell/TypeDef.hs view
@@ -26,25 +26,25 @@ ---- Internal representation for typedefs ---- -- | Need to keep both the XML and Haskell versions of a name.-data Name = Name { xName :: String -- ^ original XML name- , hName :: String -- ^ mangled Haskell name+data Name = Name { xName :: String -- ^ original XML name+ , hName :: String -- ^ mangled Haskell name } deriving Eq data TypeDef =- DataDef Bool Name AttrFields Constructors -- ^ Bool for main\/aux.+ DataDef Bool Name AttrFields Constructors -- ^ Bool for main\/aux. | EnumDef Name [Name] deriving Eq type Constructors = [(Name,[StructType])] type AttrFields = [(Name, StructType)] data StructType = Maybe StructType- | Defaultable StructType String -- ^ String holds default value.+ | Defaultable StructType String -- ^ String holds default value. | List StructType- | List1 StructType -- ^ Non-empty lists.+ | List1 StructType -- ^ Non-empty lists. | Tuple [StructType] | OneOf [StructType]- | Any -- ^ XML's contentspec allows ANY+ | Any -- ^ XML's contentspec allows ANY | String | Defined Name deriving Eq@@ -52,50 +52,50 @@ -- used for converting StructType (roughly) back to an XML content model instance Show StructType where showsPrec p (Maybe s) = showsPrec (p+1) s . showChar '?'- showsPrec p (Defaultable s _) = shows s+ showsPrec _ (Defaultable s _) = shows s showsPrec p (List s) = showsPrec (p+1) s . showChar '*' showsPrec p (List1 s) = showsPrec (p+1) s . showChar '+'- showsPrec p (Tuple ss) = showChar '('+ showsPrec _ (Tuple ss) = showChar '(' . foldr1 (.) (intersperse (showChar ',') (map shows ss)) . showChar ')'- showsPrec p (OneOf ss) = showChar '('+ showsPrec _ (OneOf ss) = showChar '(' . foldr1 (.) (intersperse (showChar '|') (map shows ss)) . showChar ')'- showsPrec p (Any) = showString "ANY"- showsPrec p (String) = showString "#PCDATA"- showsPrec p (Defined (Name n _)) = showString n+ showsPrec _ (Any) = showString "ANY"+ showsPrec _ (String) = showString "#PCDATA"+ showsPrec _ (Defined (Name n _)) = showString n ---- Pretty-printing typedefs ---- ppTypeDef :: TypeDef -> Doc --- no attrs, no constructors+-- no attrs, no constructors ppTypeDef (DataDef _ n [] []) =- let name = ppHName n in- text "data" <+> name <+> text "=" <+> name <+> text "\t\t" <> derives+ let nme = ppHName n in+ text "data" <+> nme <+> text "=" <+> nme <+> text "\t\t" <> derives --- no attrs, single constructor+-- no attrs, single constructor ppTypeDef (DataDef _ n [] [c@(_,[_])]) = text "newtype" <+> ppHName n <+> text "=" <+> ppC c <+> text "\t\t" <> derives --- no attrs, multiple constrs+-- no attrs, multiple constrs ppTypeDef (DataDef _ n [] cs) = text "data" <+> ppHName n <+> ( text "=" <+> ppC (head cs) $$ vcat (map (\c-> text "|" <+> ppC c) (tail cs)) $$ derives ) --- nonzero attrs, no constructors+-- nonzero attrs, no constructors ppTypeDef (DataDef _ n fs []) =- let name = ppHName n in- text "data" <+> name <+> text "=" <+> name $$+ let nme = ppHName n in+ text "data" <+> nme <+> text "=" <+> nme $$ nest 4 ( text "{" <+> ppF (head fs) $$ vcat (map (\f-> text "," <+> ppF f) (tail fs)) $$ text "}" <+> derives ) --- nonzero attrs, one or more constrs+-- nonzero attrs, one or more constrs ppTypeDef (DataDef _ n fs cs) = let attr = ppAName n in text "data" <+> ppHName n <+>@@ -107,7 +107,7 @@ vcat (map (\f-> text "," <+> ppF f) (tail fs)) $$ text "}" <+> derives ) --- enumerations (of attribute values)+-- enumerations (of attribute values) ppTypeDef (EnumDef n es) = text "data" <+> ppHName n <+> ( text "=" <+>@@ -148,7 +148,8 @@ -- | Pretty print Haskell attributes name. ppAName :: Name -> Doc ppAName (Name _ s) = text s <> text "_Attrs"- ++derives :: Doc derives = text "deriving" <+> parens (commaList (map text ["Eq","Show"])) @@ -195,39 +196,38 @@ -- | Ensure a generated name does not conflict with a standard haskell one. notPrelude :: String -> String-notPrelude "String" = "AString"-notPrelude "Maybe" = "AMaybe"-notPrelude "Either" = "AEither"+notPrelude "Bool" = "ABool"+notPrelude "Bounded" = "ABounded" notPrelude "Char" = "AChar"-notPrelude "String" = "AString"-notPrelude "Int" = "AInt"-notPrelude "Integer" = "AInteger"-notPrelude "Float" = "AFloat" notPrelude "Double" = "ADouble"-notPrelude "List1" = "AList1" -- part of HaXml-notPrelude "IO" = "AIO"-notPrelude "IOError" = "AIOError"-notPrelude "FilePath"= "AFilePath"-notPrelude "Bool" = "ABool"-notPrelude "Ordering"= "AOrdering"-notPrelude "Eq" = "AEq"-notPrelude "Ord" = "AOrd"+notPrelude "Either" = "AEither" notPrelude "Enum" = "AEnum"-notPrelude "Bounded" = "ABounded"+notPrelude "Eq" = "AEq"+notPrelude "FilePath"= "AFilePath"+notPrelude "Float" = "AFloat"+notPrelude "Floating"= "AFloating"+notPrelude "Fractional"= "AFractional" notPrelude "Functor" = "AFunctor"-notPrelude "Monad" = "AMonad"-notPrelude "Rational"= "ARational"+notPrelude "IO" = "AIO"+notPrelude "IOError" = "AIOError"+notPrelude "Int" = "AInt"+notPrelude "Integer" = "AInteger" notPrelude "Integral"= "AIntegral"+notPrelude "List1" = "AList1" -- part of HaXml+notPrelude "Maybe" = "AMaybe"+notPrelude "Monad" = "AMonad" notPrelude "Num" = "ANum"+notPrelude "Ord" = "AOrd"+notPrelude "Ordering"= "AOrdering"+notPrelude "Rational"= "ARational"+notPrelude "Read" = "ARead"+notPrelude "ReadS" = "AReadS" notPrelude "Real" = "AReal"-notPrelude "RealFrac"= "ARealFrac"-notPrelude "Floating"= "AFloating" notPrelude "RealFloat" = "ARealFloat"-notPrelude "Fractional"= "AFractional"-notPrelude "Read" = "ARead"+notPrelude "RealFrac"= "ARealFrac" notPrelude "Show" = "AShow"-notPrelude "ReadS" = "AReadS" notPrelude "ShowS" = "AShowS"+notPrelude "String" = "AString" notPrelude n = n -- | Convert an XML name to a Haskell varid.@@ -244,4 +244,5 @@ decolonify '.' = '_' decolonify c = c +commaList :: [Doc] -> Doc commaList = hcat . intersperse comma
src/Text/XML/HaXml/Escape.hs view
@@ -1,5 +1,5 @@ {- This module contains code for escaping/unescaping text in attributes- and elements in the HaXml Element type, replacing characters by character + and elements in the HaXml Element type, replacing characters by character references or vice-versa. Two uses are envisaged for this: (1) stopping HaXml generating incorrect XML when a character is included@@ -21,7 +21,7 @@ -- Something describing a particular set of escapes. stdXmlEscaper,- -- Standard boilerplate escaper, escaping everything that is + -- Standard boilerplate escaper, escaping everything that is -- nonprintable, non-ASCII, or might conceivably cause problems by -- parsing XML, for example quotes, < signs, and ampersands. @@ -56,7 +56,7 @@ ) where import Char-import Numeric+-- import Numeric import Text.XML.HaXml.Types #if __GLASGOW_HASKELL__ >= 604 || __NHC__ >= 118 || defined(__HUGS__)@@ -98,16 +98,16 @@ xmlEscape :: XmlEscaper -> Element i -> Element i-xmlEscape xmlEscaper element = +xmlEscape xmlEscaper element = compressElement (escapeElement xmlEscaper element) xmlEscapeContent :: XmlEscaper -> [Content i] -> [Content i]-xmlEscapeContent xmlEscaper cs = +xmlEscapeContent xmlEscaper cs = compressContent (escapeContent xmlEscaper cs) escapeElement :: XmlEscaper -> Element i -> Element i escapeElement xmlEscaper (Elem name attributes content) =- Elem name (escapeAttributes xmlEscaper attributes) + Elem name (escapeAttributes xmlEscaper attributes) (escapeContent xmlEscaper content) escapeAttributes :: XmlEscaper -> [Attribute] -> [Attribute]@@ -115,23 +115,23 @@ map (\ (name,av) -> (name,escapeAttValue xmlEscaper av)) atts- + escapeAttValue :: XmlEscaper -> AttValue -> AttValue escapeAttValue xmlEscaper (AttValue attValList) = AttValue (- concat ( + concat ( map (\ av -> case av of- Right ref -> [av]+ Right _ -> [av] Left s -> map- (\ c -> if isEscape xmlEscaper c + (\ c -> if isEscape xmlEscaper c then Right (mkEscape xmlEscaper c) else Left [c] )- s + s ) attValList )@@ -151,20 +151,20 @@ CString b [c] i ) str- (CElem elem i) -> [CElem (escapeElement xmlEscaper elem) i]+ (CElem element i) -> [CElem (escapeElement xmlEscaper element) i] _ -> [content] ) contents ) mkEscape :: XmlEscaper -> Char -> Reference-mkEscape (XmlEscaper {toEscape = toEscape}) ch =- case lookupFM toEscape ch of+mkEscape (XmlEscaper {toEscape = toescape}) ch =+ case lookupFM toescape ch of Nothing -> RefChar (ord ch) Just str -> RefEntity str- where- showHex = showIntAtBase 16 intToDigit - -- It should be, but in GHC it isn't.+-- where+-- _ = showIntAtBase 16 intToDigit+-- -- It should be, but in GHC it isn't. -- ------------------------------------------------------------------------ -- Unescaping@@ -175,7 +175,7 @@ compressElement (unEscapeElement xmlEscaper element) xmlUnEscapeContent :: XmlEscaper -> [Content i] -> [Content i]-xmlUnEscapeContent xmlEscaper cs = +xmlUnEscapeContent xmlEscaper cs = compressContent (unEscapeContent xmlEscaper cs) unEscapeElement :: XmlEscaper -> Element i -> Element i@@ -194,7 +194,7 @@ AttValue ( map (\ av -> case av of- Left s -> av+ Left _ -> av Right ref -> case unEscapeChar xmlEscaper ref of Just c -> Left [c] Nothing -> av@@ -205,12 +205,12 @@ unEscapeContent :: XmlEscaper -> [Content i] -> [Content i] unEscapeContent xmlEscaper content = map- (\ content -> case content of+ (\ cntnt -> case cntnt of CRef ref i -> case unEscapeChar xmlEscaper ref of Just c -> CString False [c] i- Nothing -> content- CElem elem i -> CElem (unEscapeElement xmlEscaper elem) i- _ -> content+ Nothing -> cntnt+ CElem element i -> CElem (unEscapeElement xmlEscaper element) i+ _ -> cntnt ) content @@ -250,11 +250,11 @@ compressContent [] = [] compressContent ((csb @ (CString b1 s1 i1)) : cs) = case compressContent cs of- (CString b2 s2 i2) : cs2+ (CString b2 s2 _) : cs2 | b1 == b2 -> CString b1 (s1 ++ s2) i1: cs2 cs2 -> csb : cs2-compressContent (CElem element i : cs) = +compressContent (CElem element i : cs) = CElem (compressElement element) i : compressContent cs compressContent (c : cs) = c : compressContent cs @@ -266,7 +266,7 @@ stdXmlEscaper :: XmlEscaper stdXmlEscaper = mkXmlEscaper [('\60',"lt"),('\62',"gt"),('\38',"amp"),('\39',"apos"),('\34',"quot")]- (\ ch -> + (\ ch -> let i = ord ch in@@ -279,13 +279,13 @@ '>' -> True _ -> False )- - ++ mkXmlEscaper :: [(Char,String)] -> (Char -> Bool) -> XmlEscaper-mkXmlEscaper escapes isEscape =+mkXmlEscaper escapes isescape = XmlEscaper { toEscape = listToFM escapes, fromEscape = listToFM (map (\ (c,str) -> (str,c)) escapes),- isEscape = isEscape+ isEscape = isescape }
src/Text/XML/HaXml/Html/Generate.hs view
@@ -29,7 +29,6 @@ ) where import Char (isSpace)-import List (partition) import Text.XML.HaXml.Types import Text.XML.HaXml.Combinators@@ -94,41 +93,41 @@ -- htmlprint :: [Content] -> String -- htmlprint = concatMap cprint -- where--- cprint (CElem e _) = elem e +-- cprint (CElem e _) = elem e -- cprint (CString _ s) = s -- cprint (CMisc m) = ""--- +-- -- elem (Elem n as []) = "\n<"++n++attrs as++" />" -- elem (Elem n as cs) = "\n<"++n++attrs as++">"++htmlprint cs++"\n</"++n++">"--- +-- -- attrs = concatMap attr -- attr (n,v) = " "++n++"='"++v++"'" htmlprint :: [Content i] -> Pretty.Doc-htmlprint = Pretty.cat . map cprint . foldrefs +htmlprint = Pretty.cat . map cprint . foldrefs where foldrefs [] = [] foldrefs (CString ws s1 i:CRef r _:CString _ s2 _:cs) = CString ws (s1++"&"++ref r++";"++s2) i: foldrefs cs foldrefs (c:cs) = c : foldrefs cs ---ref (RefEntity (EntityRef n)) = n -- Actually, should look-up symtable.+--ref (RefEntity (EntityRef n)) = n -- Actually, should look-up symtable. --ref (RefChar (CharRef s)) = s- ref (RefEntity n) = n -- Actually, should look-up symtable.+ ref (RefEntity n) = n -- Actually, should look-up symtable. ref (RefChar s) = show s - cprint (CElem e _) = elem e+ cprint (CElem e _) = element e cprint (CString ws s _) = Pretty.cat (map Pretty.text (fmt 60 ((if ws then id else deSpace) s))) cprint (CRef r _) = Pretty.text ("&"++ref r++";")- cprint (CMisc m _) = Pretty.empty- - elem (Elem n as []) = Pretty.text "<" Pretty.<>+ cprint (CMisc _ _) = Pretty.empty++ element (Elem n as []) = Pretty.text "<" Pretty.<> Pretty.text n Pretty.<> attrs as Pretty.<> Pretty.text " />"- elem (Elem n as cs) =+ element (Elem n as cs) = -- ( Pretty.text "<" Pretty.<> -- Pretty.text n Pretty.<> -- attrs as Pretty.<>@@ -147,15 +146,15 @@ Pretty.text ">" ) ] - attrs = Pretty.cat . map attr- attr (n,v@(AttValue _)) =+ attrs = Pretty.cat . map attribute+ attribute (n,v@(AttValue _)) = Pretty.text " " Pretty.<> Pretty.text n Pretty.<> Pretty.text "='" Pretty.<> Pretty.text (show v) Pretty.<> Pretty.text "'" - fmt n [] = []+ fmt _ [] = [] fmt n s = let (top,bot) = splitAt n s (word,left) = keepUntil isSpace (reverse top) in if length top < n then [s]@@ -170,6 +169,7 @@ | otherwise = c : deSpace cs keepUntil p xs = select p ([],xs)- where select p (ls,[]) = (ls,[])- select p (ls,(x:xs)) | p x = (ls,x:xs)- | otherwise = select p (x:ls,xs)+ where select _ (ls,[]) = (ls,[])+ select q (ls,(y:ys)) | q y = (ls,y:ys)+ | otherwise = select q (y:ls,ys)+
src/Text/XML/HaXml/OneOfN.hs view
@@ -8,7 +8,7 @@ instance (HTypeable a,HTypeable b) => HTypeable (OneOf2 a b)- where toHType m = Defined "OneOf2" [] []+ where toHType _ = Defined "OneOf2" [] [] -- toHType m = Defined "OneOf2" [a,b] [] -- where a = toHType $ (\ (OneOf2 a)->a) $ m -- b = toHType $ (\ (TwoOf2 b)->b) $ m@@ -30,7 +30,7 @@ instance (HTypeable a,HTypeable b,HTypeable c) => HTypeable (OneOf3 a b c)- where toHType m = Defined "OneOf3" [] []+ where toHType _ = Defined "OneOf3" [] [] instance (XmlContent a,XmlContent b,XmlContent c) => XmlContent (OneOf3 a b c)@@ -49,7 +49,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d) => HTypeable (OneOf4 a b c d)- where toHType m = Defined "OneOf4" [] []+ where toHType _ = Defined "OneOf4" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d) => XmlContent (OneOf4 a b c d)@@ -69,7 +69,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e) => HTypeable (OneOf5 a b c d e)- where toHType m = Defined "OneOf5" [] []+ where toHType _ = Defined "OneOf5" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e) => XmlContent (OneOf5 a b c d e)@@ -92,7 +92,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e ,HTypeable f) => HTypeable (OneOf6 a b c d e f)- where toHType m = Defined "OneOf6" [] []+ where toHType _ = Defined "OneOf6" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f)@@ -118,7 +118,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e ,HTypeable f,HTypeable g) => HTypeable (OneOf7 a b c d e f g)- where toHType m = Defined "OneOf7" [] []+ where toHType _ = Defined "OneOf7" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g)@@ -145,7 +145,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e ,HTypeable f,HTypeable g,HTypeable h) => HTypeable (OneOf8 a b c d e f g h)- where toHType m = Defined "OneOf8" [] []+ where toHType _ = Defined "OneOf8" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h)@@ -173,7 +173,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e ,HTypeable f,HTypeable g,HTypeable h,HTypeable i) => HTypeable (OneOf9 a b c d e f g h i)- where toHType m = Defined "OneOf9" [] []+ where toHType _ = Defined "OneOf9" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i)@@ -203,7 +203,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j) => HTypeable (OneOf10 a b c d e f g h i j)- where toHType m = Defined "OneOf10" [] []+ where toHType _ = Defined "OneOf10" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j)@@ -236,7 +236,7 @@ ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j ,HTypeable k) => HTypeable (OneOf11 a b c d e f g h i j k)- where toHType m = Defined "OneOf11" [] []+ where toHType _ = Defined "OneOf11" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -272,7 +272,7 @@ ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j ,HTypeable k,HTypeable l) => HTypeable (OneOf12 a b c d e f g h i j k l)- where toHType m = Defined "OneOf12" [] []+ where toHType _ = Defined "OneOf12" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -309,7 +309,7 @@ ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j ,HTypeable k,HTypeable l,HTypeable m) => HTypeable (OneOf13 a b c d e f g h i j k l m)- where toHType m = Defined "OneOf13" [] []+ where toHType _ = Defined "OneOf13" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -347,7 +347,7 @@ ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j ,HTypeable k,HTypeable l,HTypeable m,HTypeable n) => HTypeable (OneOf14 a b c d e f g h i j k l m n)- where toHType m = Defined "OneOf14" [] []+ where toHType _ = Defined "OneOf14" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -388,7 +388,7 @@ ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o) => HTypeable (OneOf15 a b c d e f g h i j k l m n o)- where toHType m = Defined "OneOf15" [] []+ where toHType _ = Defined "OneOf15" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -431,7 +431,7 @@ ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o ,HTypeable p) => HTypeable (OneOf16 a b c d e f g h i j k l m n o p)- where toHType m = Defined "OneOf16" [] []+ where toHType _ = Defined "OneOf16" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -476,7 +476,7 @@ ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o ,HTypeable p,HTypeable q) => HTypeable (OneOf17 a b c d e f g h i j k l m n o p q)- where toHType m = Defined "OneOf17" [] []+ where toHType _ = Defined "OneOf17" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -523,7 +523,7 @@ ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o ,HTypeable p,HTypeable q,HTypeable r) => HTypeable (OneOf18 a b c d e f g h i j k l m n o p q r)- where toHType m = Defined "OneOf18" [] []+ where toHType _ = Defined "OneOf18" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -572,7 +572,7 @@ ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o ,HTypeable p,HTypeable q,HTypeable r,HTypeable s) => HTypeable (OneOf19 a b c d e f g h i j k l m n o p q r s)- where toHType m = Defined "OneOf19" [] []+ where toHType _ = Defined "OneOf19" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -622,7 +622,7 @@ ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o ,HTypeable p,HTypeable q,HTypeable r,HTypeable s,HTypeable t) => HTypeable (OneOf20 a b c d e f g h i j k l m n o p q r s t)- where toHType m = Defined "OneOf20" [] []+ where toHType _ = Defined "OneOf20" [] [] instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
src/Text/XML/HaXml/Posn.hs view
@@ -42,7 +42,7 @@ posInNewCxt name pos = Pn name 1 1 pos instance Show Posn where- showsPrec p (Pn f l c i) = showString f .+ showsPrec _ (Pn f l c i) = showString f . showString " at line " . shows l . showString " col " . shows c . ( case i of@@ -53,7 +53,7 @@ -- | Just used to strictify the internal values of a position, to avoid -- space leaks. forcep :: Posn -> Int-forcep (Pn f n m i) = m `seq` n+forcep (Pn _ n m _) = m `seq` n -- | Add n character positions to the given position. addcol :: Int -> Posn -> Posn@@ -61,7 +61,7 @@ -- | Add a newline or tab to the given position. newline, tab :: Posn -> Posn-newline (Pn f r c i) = Pn f (r+1) 1 i+newline (Pn f r _ i) = Pn f (r+1) 1 i tab (Pn f r c i) = Pn f r (((c`div`8)+1)*8) i -- | Add the given whitespace char to the given position.
src/Text/XML/HaXml/Pretty.hs view
@@ -28,10 +28,12 @@ import Text.PrettyPrint.HughesPJ import Text.XML.HaXml.Types -either f g (Left x) = f x-either f g (Right x) = g x+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1+either f _ (Left x) = f x+either _ g (Right x) = g x -maybe f Nothing = empty+maybe :: (t -> Doc) -> Maybe t -> Doc+maybe _ Nothing = empty maybe f (Just x) = f x --peref p = text "%" <> text p <> text ";"@@ -69,7 +71,7 @@ misc (PI (n,s)) = text "<?" <> text n <+> text s <> text "?>" sddecl sd | sd = text "standalone='yes'" | otherwise = text "standalone='no'"-doctypedecl (DTD n eid ds) = if null ds then +doctypedecl (DTD n eid ds) = if null ds then hd <> text ">" else hd <+> text " [" $$ vcat (map markupdecl ds) $$ text "]>"@@ -80,12 +82,12 @@ markupdecl (Entity e) = entitydecl e markupdecl (Notation n) = notationdecl n markupdecl (MarkupMisc m) = misc m---markupdecl (MarkupPE p m) = peref p+-- markupdecl (MarkupPE p m) = peref p extsubset (ExtSubset t ds) = maybe textdecl t $$ vcat (map extsubsetdecl ds)-extsubsetdecl (ExtMarkupDecl m) = markupdecl m+extmarkupdecl (ExtMarkupDecl m) = markupdecl m extsubsetdecl (ExtConditionalSect c) = conditionalsect c---extsubsetdecl (ExtPEReference p e) = peref p+-- extsubsetdecl (ExtPEReference p e) = peref p element (Elem n as []) = text "<" <> text n <+> fsep (map attribute as) <> text "/>"@@ -99,15 +101,18 @@ | otherwise = let (d,c) = carryelem e empty in d <> c +isText :: Content t -> Bool isText (CString _ _ _) = True isText (CRef _ _) = True isText _ = False +carryelem :: Element t -> Doc -> (Doc, Doc)+carrycontent :: Content t -> Doc -> (Doc, Doc) carryelem (Elem n as []) c = ( c <> text "<" <> text n <+> fsep (map attribute as) , text "/>")-carryelem e@(Elem n as cs) c+carryelem (Elem n as cs) c -- | any isText cs = ( c <> element e, empty) | otherwise = let (cs0,d0) = carryscan carrycontent cs (text ">") in@@ -123,7 +128,7 @@ carrycontent (CMisc m _) c = (c <> misc m, empty) carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)-carryscan f [] c = ([],c)+carryscan _ [] c = ([],c) carryscan f (a:as) c = let (b, c0) = f a c (bs,c1) = carryscan f as c0 in (b:bs, c1)@@ -153,8 +158,10 @@ content (CRef r _) = reference r content (CMisc m _) = misc m +elementdecl :: ElementDecl -> Doc elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+> contentspec cs <> text ">"+contentspec :: ContentSpec -> Doc contentspec EMPTY = text "EMPTY" contentspec ANY = text "ANY" contentspec (Mixed m) = mixed m@@ -166,21 +173,27 @@ cp (Seq cs m) = parens (hcat (intersperse (text ",") (map cp cs))) <> modifier m --cp (CPPE p c) = peref p+modifier :: Modifier -> Doc modifier None = empty modifier Query = text "?" modifier Star = text "*" modifier Plus = text "+"+mixed :: Mixed -> Doc mixed PCDATA = text "(#PCDATA)" mixed (PCDATAplus ns) = text "(#PCDATA |" <+> hcat (intersperse (text "|") (map text ns)) <> text ")*" +attlistdecl :: AttListDecl -> Doc attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+> fsep (map attdef ds) <> text ">"+attdef :: AttDef -> Doc attdef (AttDef n t d) = text n <+> atttype t <+> defaultdecl d+atttype :: AttType -> Doc atttype StringType = text "CDATA" atttype (TokenizedType t) = tokenizedtype t atttype (EnumeratedType t) = enumeratedtype t+tokenizedtype :: TokenizedType -> Doc tokenizedtype ID = text "ID" tokenizedtype IDREF = text "IDREF" tokenizedtype IDREFS = text "IDREFS"@@ -188,11 +201,15 @@ tokenizedtype ENTITIES = text "ENTITIES" tokenizedtype NMTOKEN = text "NMTOKEN" tokenizedtype NMTOKENS = text "NMTOKENS"+enumeratedtype :: EnumeratedType -> Doc enumeratedtype (NotationType n)= notationtype n enumeratedtype (Enumeration e) = enumeration e+notationtype :: [String] -> Doc notationtype ns = text "NOTATION" <+> parens (hcat (intersperse (text "|") (map text ns)))+enumeration :: [String] -> Doc enumeration ns = parens (hcat (intersperse (text "|") (map nmtoken ns)))+defaultdecl :: DefaultDecl -> Doc defaultdecl REQUIRED = text "#REQUIRED" defaultdecl IMPLIED = text "#IMPLIED" defaultdecl (DefaultTo a f) = maybe (const (text "#FIXED")) f <+> attvalue a@@ -206,54 +223,76 @@ where internal (ics,i) = text "<![[" <+> ignoresectcontents ics <+> text "]]>" <+> ignore i+reference :: Reference -> Doc reference (RefEntity er) = entityref er reference (RefChar cr) = charref cr+entityref :: String -> Doc entityref n = text "&" <> text n <> text ";"+charref :: (Show a) => a -> Doc charref c = text "&#" <> text (show c) <> text ";"+entitydecl :: EntityDecl -> Doc entitydecl (EntityGEDecl d) = gedecl d entitydecl (EntityPEDecl d) = pedecl d+gedecl :: GEDecl -> Doc gedecl (GEDecl n ed) = text "<!ENTITY" <+> text n <+> entitydef ed <> text ">"+pedecl :: PEDecl -> Doc pedecl (PEDecl n pd) = text "<!ENTITY %" <+> text n <+> pedef pd <> text ">"-entitydef (DefEntityValue ev) = entityvalue ev+entitydef :: EntityDef -> Doc+entitydef (DefEntityValue ew) = entityvalue ew entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd-pedef (PEDefEntityValue ev) = entityvalue ev+pedef :: PEDef -> Doc+pedef (PEDefEntityValue ew) = entityvalue ew pedef (PEDefExternalID eid) = externalid eid+externalid :: ExternalID -> Doc externalid (SYSTEM sl) = text "SYSTEM" <+> systemliteral sl externalid (PUBLIC i sl) = text "PUBLIC" <+> pubidliteral i <+> systemliteral sl+ndatadecl :: NDataDecl -> Doc ndatadecl (NDATA n) = text "NDATA" <+> text n textdecl (TextDecl vi ed) = text "<?xml" <+> maybe text vi <+> encodingdecl ed <+> text "?>" extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c extpe (ExtPE t esd) = maybe textdecl t <+> vcat (map extsubsetdecl esd)+notationdecl :: NotationDecl -> Doc notationdecl (NOTATION n e) = text "<!NOTATION" <+> text n <+> either externalid publicid e <> text ">"+publicid :: PublicID -> Doc publicid (PUBLICID p) = text "PUBLIC" <+> pubidliteral p+encodingdecl :: EncodingDecl -> Doc encodingdecl (EncodingDecl s) = text "encoding='" <> text s <> text "'"+nmtoken :: String -> Doc nmtoken s = text s+attvalue :: AttValue -> Doc attvalue (AttValue esr) = text "\"" <> hcat (map (either text reference) esr) <> text "\""+entityvalue :: EntityValue -> Doc entityvalue (EntityValue evs) | containsDoubleQuote evs = text "'" <> hcat (map ev evs) <> text "'" | otherwise = text "\"" <> hcat (map ev evs) <> text "\""+ev :: EV -> Doc ev (EVString s) = text s --ev (EVPERef p e) = peref p ev (EVRef r) = reference r+pubidliteral :: PubidLiteral -> Doc pubidliteral (PubidLiteral s) | '"' `elem` s = text "'" <> text s <> text "'" | otherwise = text "\"" <> text s <> text "\""+systemliteral :: SystemLiteral -> Doc systemliteral (SystemLiteral s) | '"' `elem` s = text "'" <> text s <> text "'" | otherwise = text "\"" <> text s <> text "\""+chardata :: String -> Doc chardata s = {-if all isSpace s then empty else-} text s+cdsect :: String -> Doc cdsect c = text "<![CDATA[" <> chardata c <> text "]]>" ----+containsDoubleQuote :: [EV] -> Bool containsDoubleQuote evs = any csq evs where csq (EVString s) = '"' `elem` s csq _ = False
src/Text/XML/HaXml/SAX.hs view
@@ -35,8 +35,8 @@ -> ([SaxElement],Maybe String) -- ^ A tuple of the parsed elements and @Nothing@, if no -- error occured, or @Just@ @String@ if an error occured.-saxParse file content = parseStream sax emptySTs- (xmlLex file content)+saxParse file cntnt = parseStream sax emptySTs+ (xmlLex file cntnt) parseStream :: Parser s t a -> s -> [t] -> ([a], Maybe String) parseStream _ _ [] = ([],Nothing)@@ -78,13 +78,13 @@ saxcomment = comment >>= return . SaxComment saxchardata :: XParser SaxElement-saxchardata = +saxchardata = (cdsect >>= return . SaxCharData) `onFail` (chardata >>= return . SaxCharData) saxreference :: XParser SaxElement-saxreference = reference >>= return . SaxReference +saxreference = reference >>= return . SaxReference saxdoctypedecl :: XParser SaxElement saxdoctypedecl = doctypedecl >>= return . SaxDocTypeDecl
src/Text/XML/HaXml/ShowXmlLazy.hs view
@@ -1,15 +1,14 @@- module Text.XML.HaXml.ShowXmlLazy (showXmlLazy) where import Text.XML.HaXml.Types-import Text.XML.HaXml.TypeMapping+import Text.XML.HaXml.TypeMapping -- (toHType, toDTD, Tuple(), Defined, showHType) import qualified Text.XML.HaXml.XmlContent as X import Prelude hiding (maybe,either) import Maybe hiding (maybe) import Data.List --- | Convert a fully-typed XML document to a string (without DTD). +-- | Convert a fully-typed XML document to a string (without DTD). showXmlLazy :: X.XmlContent a => Bool -> a -> String showXmlLazy dtd x = case X.toContents x of@@ -17,7 +16,7 @@ _ -> "" --- | Convert a fully-typed XML document to a string (with or without DTD). +-- | Convert a fully-typed XML document to a string (with or without DTD). toXmlLazy :: X.XmlContent a => Bool -> a -> Document () toXmlLazy dtd value = let ht = toHType value in@@ -34,23 +33,35 @@ type Doc = String+empty :: [Char] empty = ""+($$) :: [Char] -> [Char] -> [Char] ($$) a b = a ++ "\n" ++ b+vcat :: [[Char]] -> [Char] vcat a = foldr ($$) [] a+hcat :: [[a]] -> [a] hcat = concat+(<>) :: [a] -> [a] -> [a] (<>) = (++)+(<+>) :: [Char] -> [Char] -> [Char] (<+>) a b = a ++ " " ++ b+fsep :: [[Char]] -> [Char] fsep = vcat+text :: t -> t text string = string+parens :: [Char] -> [Char] parens string = "("++string++")"+nest :: t -> t1 -> t1 nest _ string = string -either f g (Left x) = f x-either f g (Right x) = g x+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1+either f _ (Left x) = f x+either _ g (Right x) = g x -maybe f Nothing = empty+maybe :: (t -> [Char]) -> Maybe t -> [Char]+maybe _ Nothing = empty maybe f (Just x) = f x --peref p = text "%" <> text p <> text ";"@@ -65,8 +76,8 @@ doctypedecl :: DocTypeDecl -> Doc markupdecl :: MarkupDecl -> Doc-extsubset :: ExtSubset -> Doc-extsubsetdecl :: ExtSubsetDecl -> Doc+-- extsubset :: ExtSubset -> Doc+-- extsubsetdecl :: ExtSubsetDecl -> Doc cp :: CP -> Doc element :: Element i -> Doc@@ -88,7 +99,7 @@ misc (PI (n,s)) = text "<?" <> text n <+> text s <+> text "?>" sddecl sd | sd = text "standalone='yes'" | otherwise = text "standalone='no'"-doctypedecl (DTD n eid ds) = if null ds then +doctypedecl (DTD n eid ds) = if null ds then hd <> text ">" else hd <+> text " [" $$ vcat (map markupdecl ds) $$ text "]>"@@ -100,10 +111,10 @@ markupdecl (Notation n) = notationdecl n markupdecl (MarkupMisc m) = misc m --markupdecl (MarkupPE p m) = peref p-extsubset (ExtSubset t ds) = maybe textdecl t $$- vcat (map extsubsetdecl ds)-extsubsetdecl (ExtMarkupDecl m) = markupdecl m-extsubsetdecl (ExtConditionalSect c) = conditionalsect c+-- _ (ExtSubset t ds) = maybe textdecl t $$+-- vcat (map extsubsetdecl ds)+-- _ (ExtMarkupDecl m) = markupdecl m+-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c --extsubsetdecl (ExtPEReference p e) = peref p element (Elem n as []) = text "<" <> text n <+>@@ -118,6 +129,7 @@ | otherwise = let (d,c) = carryelem e empty in d <> c +isText :: Content t -> Bool isText (CString _ _ _) = True isText (CRef _ _) = True isText _ = False@@ -126,15 +138,17 @@ = ( c <> text "<" <> text n <+> fsep (map attribute as) , text "/>")-carryelem e@(Elem n as cs) c+carryelem (Elem n as cs) c -- | any isText cs = ( c <> element e, empty) | otherwise = let (cs0,d0) = carryscan carrycontent cs (text ">") in ( c <> text "<" <> text n <+> fsep (map attribute as) $$- nest 2 (vcat cs0) <> --- $$+ nest (2 :: Int) (vcat cs0) <> --- $$ d0 <> text "</" <> text n , text ">")+carrycontent :: Content t -> [Char] -> ([Char], [Char])+carryelem :: Element t -> [Char] -> ([Char], [Char]) carrycontent (CElem e _) c = carryelem e c carrycontent (CString False s _) c = (c <> chardata s, empty) carrycontent (CString True s _) c = (c <> cdsect s, empty)@@ -142,7 +156,7 @@ carrycontent (CMisc m _) c = (c <> misc m, empty) carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)-carryscan f [] c = ([],c)+carryscan _ [] c = ([],c) carryscan f (a:as) c = let (b, c0) = f a c (bs,c1) = carryscan f as c0 in (b:bs, c1)@@ -172,8 +186,10 @@ content (CRef r _) = reference r content (CMisc m _) = misc m +elementdecl :: ElementDecl -> [Char] elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+> contentspec cs <> text ">"+contentspec :: ContentSpec -> [Char] contentspec EMPTY = text "EMPTY" contentspec ANY = text "ANY" contentspec (Mixed m) = mixed m@@ -185,21 +201,27 @@ cp (Seq cs m) = parens (hcat (intersperse (text ",") (map cp cs))) <> modifier m --cp (CPPE p c) = peref p+modifier :: Modifier -> [Char] modifier None = empty modifier Query = text "?" modifier Star = text "*" modifier Plus = text "+"+mixed :: Mixed -> [Char] mixed PCDATA = text "(#PCDATA)" mixed (PCDATAplus ns) = text "(#PCDATA |" <+> hcat (intersperse (text "|") (map text ns)) <> text ")*" +attlistdecl :: AttListDecl -> [Char] attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+> fsep (map attdef ds) <> text ">"+attdef :: AttDef -> [Char] attdef (AttDef n t d) = text n <+> atttype t <+> defaultdecl d+atttype :: AttType -> [Char] atttype StringType = text "CDATA" atttype (TokenizedType t) = tokenizedtype t atttype (EnumeratedType t) = enumeratedtype t+tokenizedtype :: TokenizedType -> [Char] tokenizedtype ID = text "ID" tokenizedtype IDREF = text "IDREF" tokenizedtype IDREFS = text "IDREFS"@@ -207,72 +229,98 @@ tokenizedtype ENTITIES = text "ENTITIES" tokenizedtype NMTOKEN = text "NMTOKEN" tokenizedtype NMTOKENS = text "NMTOKENS"+enumeratedtype :: EnumeratedType -> [Char] enumeratedtype (NotationType n)= notationtype n enumeratedtype (Enumeration e) = enumeration e+notationtype :: [[Char]] -> [Char] notationtype ns = text "NOTATION" <+> parens (hcat (intersperse (text "|") (map text ns)))+enumeration :: [[Char]] -> [Char] enumeration ns = parens (hcat (intersperse (text "|") (map nmtoken ns)))+defaultdecl :: DefaultDecl -> [Char] defaultdecl REQUIRED = text "#REQUIRED" defaultdecl IMPLIED = text "#IMPLIED" defaultdecl (DefaultTo a f) = maybe (const (text "#FIXED")) f <+> attvalue a-conditionalsect (IncludeSect i)= text "<![INCLUDE [" <+>- vcat (map extsubsetdecl i) <+> text "]]>"-conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>- fsep (map ignoresectcontents i) <+> text "]]>"-ignore (Ignore) = empty-ignoresectcontents (IgnoreSectContents i is)- = ignore i <+> vcat (map internal is)- where internal (ics,i) = text "<![[" <+>- ignoresectcontents ics <+>- text "]]>" <+> ignore i+-- _ (IncludeSect i)= text "<![INCLUDE [" <+>+-- vcat (map extsubsetdecl i) <+> text "]]>"+-- conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>+-- fsep (map ignoresectcontents i) <+> text "]]>"+-- _ (Ignore) = empty+-- _ (IgnoreSectContents i is)+-- = ignore i <+> vcat (map internal is)+-- where internal (ics,i) = text "<![[" <+>+-- ignoresectcontents ics <+>+-- text "]]>" <+> ignore i+reference :: Reference -> [Char] reference (RefEntity er) = entityref er reference (RefChar cr) = charref cr+entityref :: [Char] -> [Char] entityref n = text "&" <> text n <> text ";"+charref :: (Show a) => a -> [Char] charref c = text "&#" <> text (show c) <> text ";"+entitydecl :: EntityDecl -> [Char] entitydecl (EntityGEDecl d) = gedecl d entitydecl (EntityPEDecl d) = pedecl d+gedecl :: GEDecl -> [Char] gedecl (GEDecl n ed) = text "<!ENTITY" <+> text n <+> entitydef ed <> text ">"+pedecl :: PEDecl -> [Char] pedecl (PEDecl n pd) = text "<!ENTITY %" <> text n <+> pedef pd <> text ">"-entitydef (DefEntityValue ev) = entityvalue ev+entitydef :: EntityDef -> [Char]+entitydef (DefEntityValue ew) = entityvalue ew entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd-pedef (PEDefEntityValue ev) = entityvalue ev+pedef :: PEDef -> [Char]+pedef (PEDefEntityValue ew) = entityvalue ew pedef (PEDefExternalID eid) = externalid eid+externalid :: ExternalID -> [Char] externalid (SYSTEM sl) = text "SYSTEM" <+> systemliteral sl externalid (PUBLIC i sl) = text "PUBLIC" <+> pubidliteral i <+> systemliteral sl+ndatadecl :: NDataDecl -> [Char] ndatadecl (NDATA n) = text "NDATA" <+> text n-textdecl (TextDecl vi ed) = text "<?xml" <+> maybe text vi <+>- encodingdecl ed <> text "?>"-extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c-extpe (ExtPE t esd) = maybe textdecl t <+>- vcat (map extsubsetdecl esd)+-- _ (TextDecl vi ed) = text "<?xml" <+> maybe text vi <+>+-- encodingdecl ed <> text "?>"+-- _ (ExtParsedEnt t c)= maybe textdecl t <+> content c+-- _ (ExtPE t esd) = maybe textdecl t <+>+-- vcat (map extsubsetdecl esd)+notationdecl :: NotationDecl -> [Char] notationdecl (NOTATION n e) = text "<!NOTATION" <+> text n <+> either externalid publicid e <> text ">"+publicid :: PublicID -> [Char] publicid (PUBLICID p) = text "PUBLICID" <+> pubidliteral p+encodingdecl :: EncodingDecl -> [Char] encodingdecl (EncodingDecl s) = text "encoding='" <> text s <> text "'"+nmtoken :: t -> t nmtoken s = text s+attvalue :: AttValue -> [Char] attvalue (AttValue esr) = text "\"" <> hcat (map (either text reference) esr) <> text "\""+entityvalue :: EntityValue -> [Char] entityvalue (EntityValue evs) | containsDoubleQuote evs = text "'" <> hcat (map ev evs) <> text "'" | otherwise = text "\"" <> hcat (map ev evs) <> text "\""+ev :: EV -> String ev (EVString s) = text s --ev (EVPERef p e) = peref p ev (EVRef r) = reference r+pubidliteral :: PubidLiteral -> [Char] pubidliteral (PubidLiteral s) | '"' `elem` s = text "'" <> text s <> text "'" | otherwise = text "\"" <> text s <> text "\""+systemliteral :: SystemLiteral -> [Char] systemliteral (SystemLiteral s) | '"' `elem` s = text "'" <> text s <> text "'" | otherwise = text "\"" <> text s <> text "\""+chardata :: t -> t chardata s = {-if all isSpace s then empty else-} text s+cdsect :: [Char] -> [Char] cdsect c = text "<![CDATA[" <> chardata c <> text "]]>" ----+containsDoubleQuote :: [EV] -> Bool containsDoubleQuote evs = any csq evs where csq (EVString s) = '"' `elem` s csq _ = False
src/Text/XML/HaXml/TypeMapping.hs view
@@ -90,6 +90,21 @@ instance (HTypeable a, HTypeable b, HTypeable c) => HTypeable (a,b,c) where toHType p = Tuple [toHType a, toHType b, toHType c] where (a,b,c) = p+instance (HTypeable a, HTypeable b, HTypeable c, HTypeable d) =>+ HTypeable (a,b,c,d) where+ toHType p = Tuple [toHType a, toHType b, toHType c, toHType d]+ where (a,b,c,d) = p+instance (HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e) =>+ HTypeable (a,b,c,d,e) where+ toHType p = Tuple [ toHType a, toHType b, toHType c, toHType d+ , toHType e ]+ where (a,b,c,d,e) = p+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e+ , HTypeable f) =>+ HTypeable (a,b,c,d,e,f) where+ toHType p = Tuple [ toHType a, toHType b, toHType c, toHType d+ , toHType e, toHType f ]+ where (a,b,c,d,e,f) = p instance (HTypeable a) => HTypeable (Maybe a) where toHType m = Maybe (toHType x) where (Just x) = m instance (HTypeable a, HTypeable b) => HTypeable (Either a b) where
src/Text/XML/HaXml/Types.hs view
@@ -135,15 +135,15 @@ data XMLDecl = XMLDecl VersionInfo (Maybe EncodingDecl) (Maybe SDDecl) deriving Eq data Misc = Comment Comment- | PI ProcessingInstruction + | PI ProcessingInstruction deriving Eq- + type ProcessingInstruction = (PITarget,String) -type SDDecl = Bool -type VersionInfo = String -type Comment = String -type PITarget = String +type SDDecl = Bool+type VersionInfo = String+type Comment = String+type PITarget = String data DocTypeDecl = DTD Name (Maybe ExternalID) [MarkupDecl] deriving Eq data MarkupDecl = Element ElementDecl@@ -159,15 +159,17 @@ deriving Eq data Element i = Elem Name [Attribute] [Content i] deriving Eq- -- intermediate for parsing+ -- intermediate for parsing data ElemTag = ElemTag Name [Attribute] type Attribute = (Name, AttValue) data Content i = CElem (Element i) i | CString Bool CharData i- -- ^ bool is whether whitespace is significant+ -- ^ bool is whether whitespace is significant | CRef Reference i | CMisc Misc i deriving Eq++info :: Content t -> t info (CElem _ i) = i info (CString _ _ i) = i info (CRef _ i) = i@@ -192,21 +194,21 @@ -- FIXME: What is TagName here? Seems to be in disagreement with XML spec. data CP = TagName Name Modifier | Choice [CP] Modifier- | Seq [CP] Modifier + | Seq [CP] Modifier deriving Eq data Modifier = None -- ^ Just One | Query -- ^ Zero Or One | Star -- ^ Zero Or More- | Plus -- ^ One Or More + | Plus -- ^ One Or More deriving Eq data Mixed = PCDATA- | PCDATAplus [Name] + | PCDATAplus [Name] deriving Eq data AttListDecl = AttListDecl Name [AttDef] deriving Eq data AttDef = AttDef Name AttType DefaultDecl deriving Eq data AttType = StringType | TokenizedType TokenizedType- | EnumeratedType EnumeratedType + | EnumeratedType EnumeratedType deriving Eq data TokenizedType = ID | IDREF@@ -214,21 +216,21 @@ | ENTITY | ENTITIES | NMTOKEN- | NMTOKENS + | NMTOKENS deriving Eq data EnumeratedType = NotationType NotationType- | Enumeration Enumeration + | Enumeration Enumeration deriving Eq-type NotationType = [Name] -- nonempty list-type Enumeration = [NmToken] -- nonempty list+type NotationType = [Name] -- nonempty list+type Enumeration = [NmToken] -- nonempty list data DefaultDecl = REQUIRED | IMPLIED- | DefaultTo AttValue (Maybe FIXED) + | DefaultTo AttValue (Maybe FIXED) deriving Eq data FIXED = FIXED deriving Eq data ConditionalSect = IncludeSect IncludeSect- | IgnoreSect IgnoreSect + | IgnoreSect IgnoreSect deriving Eq type IncludeSect = [ExtSubsetDecl] type IgnoreSect = [IgnoreSectContents]@@ -236,19 +238,19 @@ data IgnoreSectContents = IgnoreSectContents Ignore [(IgnoreSectContents,Ignore)] deriving Eq data Reference = RefEntity EntityRef- | RefChar CharRef + | RefChar CharRef deriving (Eq,Show)-type EntityRef = Name +type EntityRef = Name type CharRef = Int-type PEReference = Name +type PEReference = Name data EntityDecl = EntityGEDecl GEDecl- | EntityPEDecl PEDecl + | EntityPEDecl PEDecl deriving Eq data GEDecl = GEDecl Name EntityDef deriving Eq data PEDecl = PEDecl Name PEDef deriving Eq-data EntityDef = DefEntityValue EntityValue - | DefExternalID ExternalID (Maybe NDataDecl) +data EntityDef = DefEntityValue EntityValue+ | DefExternalID ExternalID (Maybe NDataDecl) deriving Eq data PEDef = PEDefEntityValue EntityValue | PEDefExternalID ExternalID deriving (Eq,Show)@@ -264,16 +266,16 @@ newtype PublicID = PUBLICID PubidLiteral deriving Eq newtype EncodingDecl = EncodingDecl String deriving Eq -type Name = String -- non-empty string-type Names = [Name] -- non-empty list-type NmToken = String -- non-empty string-type NmTokens = [NmToken] -- non-empty list+type Name = String -- non-empty string+type Names = [Name] -- non-empty list+type NmToken = String -- non-empty string+type NmTokens = [NmToken] -- non-empty list data AttValue = AttValue [Either String Reference] deriving Eq instance Show AttValue where show (AttValue v) = concatMap decode v where- decode (Left v) = v+ decode (Left w) = w decode (Right (RefEntity ent)) = "&"++ent++";" decode (Right (RefChar cref)) = "&"++show cref++";" @@ -283,7 +285,7 @@ | EVRef Reference deriving (Eq,Show) newtype PubidLiteral = PubidLiteral String deriving (Eq,Show) newtype SystemLiteral = SystemLiteral String deriving (Eq,Show)-type CharData = String +type CharData = String type CDSect = CharData instance Eq ElemTag where
src/Text/XML/HaXml/Validate.hs view
@@ -220,6 +220,7 @@ choice elem ns cps = -- return only those parses that don't give any errors [ rem | ([],rem) <- map (\cp-> checkCP elem (definite cp) ns) cps ]+ ++ [ ns | all possEmpty cps ] where definite (TagName n Query) = TagName n None definite (Choice cps Query) = Choice cps None definite (Seq cps Query) = Seq cps None@@ -227,6 +228,11 @@ definite (Choice cps Star) = Choice cps Plus definite (Seq cps Star) = Seq cps Plus definite x = x+ possEmpty (TagName _ mod) = mod `Prelude.elem` [Query,Star]+ possEmpty (Choice cps None) = all possEmpty cps+ possEmpty (Choice _ mod) = mod `Prelude.elem` [Query,Star]+ possEmpty (Seq cps None) = all possEmpty cps+ possEmpty (Seq _ mod) = mod `Prelude.elem` [Query,Star] sequence elem ns cps = -- accumulate errors down the sequence foldl (\(es,ns) cp-> let (es',ns') = checkCP elem cp ns in (es++es', ns'))
src/Text/XML/HaXml/XmlContent.hs view
@@ -1,4 +1,5 @@-{-# OPTIONS -fglasgow-exts #-}+{-# LANGUAGE ExistentialQuantification #-}+ -- | The class 'XmlContent' is a kind of replacement for Read and Show: -- it provides conversions between a generic XML tree representation -- and your own more specialised typeful Haskell data trees.@@ -23,7 +24,7 @@ -- The functions 'hGetXml' and 'hPutXml' do the conversion to and from -- the given file handles. -- (See the type signatures.)--- +-- module Text.XML.HaXml.XmlContent ( -- * Re-export the relevant set of generic XML document type definitions@@ -31,7 +32,7 @@ , Element(..) , ElemTag(..) , Content(..)- , Attribute(..)+ , Attribute() , AttValue(..) , Prolog(..) , Reference(..)@@ -54,7 +55,7 @@ , definiteA, defaultA, possibleA, fromAttrToStr, toAttrFrStr , Defaultable(..) , str2attr, attr2str, attval- , catMaybes -- re-exported from Maybe+ , catMaybes -- re-exported from Maybe -- * Whole-document conversion functions , toXml, fromXml , readXml, showXml, fpsShowXml@@ -70,8 +71,8 @@ import IO import Maybe (catMaybes)-import Char (chr, ord, isSpace)-import List (intersperse, isPrefixOf, isSuffixOf, partition)+import Char (chr, isSpace)+import List (isPrefixOf, isSuffixOf) import Text.PrettyPrint.HughesPJ (render) import qualified Text.XML.HaXml.Pretty as PP@@ -80,7 +81,7 @@ import Text.XML.HaXml.TypeMapping import Text.XML.HaXml.Posn (Posn, posInNewCxt) import Text.XML.HaXml.Pretty (document)-import Text.XML.HaXml.Parse (xmlParse, fst3)+import Text.XML.HaXml.Parse (xmlParse) import Text.XML.HaXml.Verbatim (Verbatim(verbatim)) import qualified Text.XML.HaXml.ByteStringPP as FPS (document) import qualified Data.ByteString.Lazy.Char8 as FPS@@ -94,7 +95,8 @@ debug :: a -> String -> a v `debug` s = trace s v #else-v `debug` s = v+debug :: t -> t1 -> t+v `debug` _ = v #endif @@ -115,7 +117,7 @@ mkElemC :: String -> [Content ()] -> Content () mkElemC x cs = CElem (Elem x [] cs) () --- | Turn a simple string into XML text. +-- | Turn a simple string into XML text. toText :: String -> [Content ()] toText s = [CString False s ()] @@ -125,9 +127,9 @@ toCData s = [CString True s ()] ------------------------------------------------------------------------ - -- probably want to write DTD separately from value, and have- -- easy ways to combine DTD + value into a document, or write- -- them to separate files.+ -- probably want to write DTD separately from value, and have+ -- easy ways to combine DTD + value into a document, or write+ -- them to separate files. -- | Read an XML document from a file and convert it to a fully-typed -- Haskell value.@@ -135,7 +137,7 @@ fReadXml fp = do f <- ( if fp=="-" then return stdin else openFile fp ReadMode )- x <- hGetContents f + x <- hGetContents f let (Document _ _ y _) = xmlParse fp x y' = CElem y (posInNewCxt fp Nothing) either fail return (fst (runParser parseContents [y']))@@ -206,7 +208,7 @@ -- | Read a fully-typed XML document from a file handle. hGetXml :: XmlContent a => Handle -> IO a hGetXml h = do- x <- hGetContents h + x <- hGetContents h let (Document _ _ y _) = xmlParse "file handle" x either fail return (fst (runParser parseContents@@ -240,7 +242,7 @@ content word = next `adjustErr` (++" when expecting "++word) -- | Get the next content element, checking that it has one of the required--- tags, using the given matching function. +-- tags, using the given matching function. -- (Skips over comments and whitespace, rejects text and refs. -- Also returns position of element.) posnElementWith :: (String->String->Bool) -> [String]@@ -254,7 +256,7 @@ ++formatted tags++"\nat "++show pos) CString b s pos | not b && all isSpace s -> posnElementWith match tags- -- ignore blank space+ -- ignore blank space | otherwise -> fail ("Found text content, but expected " ++formatted tags++"\ntext is: "++s ++"\nat "++show pos)@@ -265,7 +267,7 @@ } where formatted [t] = "a <"++t++">"- formatted tags = "one of"++ concatMap (\t->" <"++t++">") tags+ formatted tgs = "one of"++ concatMap (\t->" <"++t++">") tgs -- | A specialisation of @posnElementWith (==)@. posnElement :: [String] -> XMLParser (Posn, Element Posn)@@ -275,12 +277,12 @@ -- tags. (Skips over comments and whitespace, rejects text and refs.) element :: [String] -> XMLParser (Element Posn) element tags = fmap snd (posnElement tags)- `debug` ("Element: "++unwords tags++"\n")+ `debug` ("Element: "++unwords tags++"\n") -- | Like element, only permits a more flexible match against the tagname. elementWith :: (String->String->Bool) -> [String] -> XMLParser (Element Posn) elementWith match tags = fmap snd (posnElementWith match tags)- `debug` ("Element: "++unwords tags++"\n")+ `debug` ("Element: "++unwords tags++"\n") -- | Run an XMLParser on the contents of the given element (i.e. not on the -- current monadic content sequence), checking that the contents are@@ -291,11 +293,11 @@ case runParser p cs of (Left msg, _) -> fail msg (Right x, []) -> return x- (Right x, cs@(c:_))- | all onlyMisc cs -> return x+ (Right x, ds@(d:_))+ | all onlyMisc ds -> return x | otherwise -> fail ("Too many elements inside <"++e++"> at\n"- ++show (info c)++"\n"- ++"Found excess: "++verbatim c)+ ++show (info d)++"\n"+ ++"Found excess: "++verbatim d) where onlyMisc (CMisc _ _) = True onlyMisc (CString False s _) | all isSpace s = True onlyMisc _ = False@@ -338,7 +340,7 @@ choice :: XmlContent a => (a -> b) -> XMLParser b -> XMLParser b choice cons (P other) = P (\cs-> case runParser parseContents cs of- (Left msg, _) -> other cs+ (Left _, _) -> other cs (Right x, cs') -> (Right (cons x), cs')) --choice cons other = fmap cons parseContents `onFail` other@@ -348,7 +350,7 @@ -- care of that for us. definite :: XmlContent a => XMLParser a -> String -> String -> XMLParser a definite p inner tag = P (\cs-> case runParser p cs of- (Left msg, cs') -> (Left (False,msg'), cs')+ (Left _, cs') -> (Left (False,msg'), cs') (Right x, cs') -> (Right x, cs')) where msg' = "content error: expected "++inner++" inside <"++tag ++"> element\n"@@ -391,7 +393,7 @@ instance XmlContent Bool where toContents b = [CElem (Elem "bool" [mkAttr "value" (show b)] []) ()] parseContents = do { e <- element ["bool"] ; return (attval e) }- + instance XmlContent Int where toContents i = [CElem (Elem "int" [mkAttr "value" (show i)] []) ()] parseContents = do { e <- element ["int"] ; return (attval e) }@@ -399,7 +401,7 @@ instance XmlContent Integer where toContents i = [CElem (Elem "integer" [mkAttr "value" (show i)] []) ()] parseContents = do { e <- element ["integer"] ; return (attval e) }- + instance XmlContent Float where toContents i = [CElem (Elem "float" [mkAttr "value" (show i)] []) ()] parseContents = do { e <- element ["float"] ; return (attval e) }@@ -439,10 +441,10 @@ scanElements es = case runParser parseContents es of (Left msg, es') -> (Left (False,msg), es')- (Right x, es') ->+ (Right y, es') -> case scanElements es' of- (Left msg, cs) -> (Left msg, cs)- (Right xs, cs) -> (Right (x:xs), cs)+ (Left msg, ds) -> (Left msg, ds)+ (Right ys, ds) -> (Right (y:ys), ds) (CElem (Elem e _ _) pos: cs) -> (Left (False ,"Expected a <list-...>, but found a <"++e++"> at\n"@@ -478,6 +480,47 @@ ; return (a,b,c) } +instance (XmlContent a, XmlContent b, XmlContent c, XmlContent d) =>+ XmlContent (a,b,c,d) where+ toContents (x,y,z,t) = toContents x ++ toContents y ++ toContents z+ ++ toContents t+ parseContents = do+ { a <- parseContents+ ; b <- parseContents+ ; c <- parseContents+ ; d <- parseContents+ ; return (a,b,c,d)+ }++instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d+ , XmlContent e ) =>+ XmlContent (a,b,c,d,e) where+ toContents (x,y,z,t,u) = toContents x ++ toContents y ++ toContents z+ ++ toContents t ++ toContents u+ parseContents = do+ { a <- parseContents+ ; b <- parseContents+ ; c <- parseContents+ ; d <- parseContents+ ; e <- parseContents+ ; return (a,b,c,d,e)+ }++instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d+ , XmlContent e, XmlContent f ) =>+ XmlContent (a,b,c,d,e,f) where+ toContents (x,y,z,t,u,v) = toContents x ++ toContents y ++ toContents z+ ++ toContents t ++ toContents u ++ toContents v+ parseContents = do+ { a <- parseContents+ ; b <- parseContents+ ; c <- parseContents+ ; d <- parseContents+ ; e <- parseContents+ ; f <- parseContents+ ; return (a,b,c,d,e,f)+ }+ instance (XmlContent a) => XmlContent (Maybe a) where toContents m = [mkElem m (maybe [] toContents m)] parseContents = do@@ -504,7 +547,7 @@ --------------------------------------------------------------------------- Useful auxiliaries for "fromAttributes" +-- Useful auxiliaries for "fromAttributes" ------------------------------------------------------------------------ -- | If an attribute is defaultable, then it either takes the default@@ -513,7 +556,7 @@ data Defaultable a = Default a | NonDefault a deriving (Eq,Show) searchMaybe :: (a -> Maybe b) -> [a] -> Maybe b-searchMaybe f [] = Nothing+searchMaybe _ [] = Nothing searchMaybe f (x:xs) = let fx = f x in case fx of@@ -522,12 +565,12 @@ maybeToAttr :: (String->a->Maybe Attribute) -> String -> Maybe a -> Maybe Attribute-maybeToAttr to n Nothing = Nothing+maybeToAttr _ _ Nothing = Nothing maybeToAttr to n (Just v) = to n v defaultToAttr :: (String->a->Maybe Attribute) -> String -> Defaultable a -> Maybe Attribute-defaultToAttr to n (Default v) = Nothing+defaultToAttr _ _ (Default _) = Nothing defaultToAttr to n (NonDefault v) = to n v definiteA :: (String->Attribute->Maybe a) -> String -> String@@ -557,8 +600,8 @@ str2attr :: String -> AttValue str2attr s =- let f s =- let (l,r) = span (\c-> not (elem c "\"&<>'")) s+ let f t =+ let (l,r) = span (\c-> not (elem c "\"&<>'")) t in if null r then [Left l] else Left l: Right (g (head r)): f (tail r) g '"' = RefEntity "quot"@@ -591,8 +634,8 @@ ... etc are now defined (with instances) in module OneOfN. -} --- | A type corresponding to XML's ANY contentspec. --- It is either a list of unconverted xml 'Content' +-- | A type corresponding to XML's ANY contentspec.+-- It is either a list of unconverted xml 'Content' -- or some 'XmlContent'-able value. -- -- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.@@ -632,5 +675,5 @@ parseContents = P (\cs -> (Right (UnConverted cs), [])) --------------------------------------------------------------------------- +-- ------------------------------------------------------------------------
src/tools/Xtract.hs view
@@ -16,6 +16,7 @@ import Text.XML.HaXml.Pretty (content) import Text.XML.HaXml.Html.Generate (htmlprint) import Text.XML.HaXml.Escape (xmlEscapeContent,stdXmlEscaper)+import Text.XML.HaXml.Util (docContent) escape = xmlEscapeContent stdXmlEscaper @@ -38,19 +39,18 @@ in -- findcontents >>= \cs-> -- ( hPutStrLn stdout . render . vcat--- . map (vcat . map content . selection . getElem)) cs+-- . map (vcat . map content . selection . docContent)) cs mapM_ (\x-> do c <- (if x=="-" then getContents else readFile x) ( if isHTML x then hPutStrLn stdout . render . htmlprint . xtract (map toLower) pattern- . getElem x . htmlParse x+ . docContent (posInNewCxt x Nothing) . htmlParse x else hPutStrLn stdout . render . vcat . map (format . esc) . xtract id pattern- . getElem x . xmlParse x) c+ . docContent (posInNewCxt x Nothing) . xmlParse x) c hFlush stdout) files -getElem x (Document _ _ e _) = CElem e (posInNewCxt x Nothing) isHTML x = ".html" `isSuffixOf` x || ".htm" `isSuffixOf` x format [] = empty