!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~j(c) Andy Gill, and the Oregon Graduate Institute of Science and Technology, 1999-2001 BSD-style (see the file LICENSE)$Chris Dornan <chris@chrisdornan.com>StablePortableSafeoCreates a (1x1) table entry Composes tables vertically. Composes tables horizontally. trans flips (transposes) over the x and y axis of the table. It is only used internally, and typically in pairs, ie. (flip ... munge ... (un)flip). This is the other thing you can do with a Table; turn it into a 2D list, tagged with the (x,y) sizes of each cell in the table.      3 4(c) Andy Gill, and the Oregon Graduate Institute of Science and Technology, 1999-2001, (c) Bjorn Bringert, 2004-2006 BSD-style (see the file LICENSE)$Chris Dornan <chris@chrisdornan.com>StablePortableSafeB8CHANGEATTRS is a more expressive alternative to ADDATTRSdHTML is the class of things that can be validly put inside an HTML tag. So this can be one or more  elements, or a , for example.Attributes with name and value.kA important property of Html is that all strings inside the structure are already in Html friendly format.?..just..plain..normal..text... but using &copy; and &amb;, etc.tag with internal markup %Put something inside an HTML element. _Create a piece of HTML which is the concatenation of two things which can be made into HTML. An empty piece of HTML.0Checks whether the given piece of HTML is empty.)Constructs an element with a custom name.FConstructs an element with a custom name, and without any children.-Processing Strings into Html friendly things.This is not processed for special chars. use stringToHtml or lineToHtml instead, for user strings, because they understand special chars, like .Output the HTML without adding newlines or spaces within the markup. This should be the most time and space efficient way to render HTML, though the ouput is quite unreadable.SOutputs indented HTML. Because space matters in HTML, the output is quite messy.Outputs indented HTML, with indentation inside elements. This can change the meaning of the HTML document, and is mostly useful for debugging the HTML output. The implementation is inefficient, and you are normally better off using showHtml or  renderHtml.rRender a piece of HTML without adding a DOCTYPE declaration or root element. Does not add any extra whitespace.Render a piece of indented HTML without adding a DOCTYPE declaration or root element. Only adds whitespace where it does not change the meaning of the document.BRender a piece of indented HTML without adding a DOCTYPE declaration or a root element. The indentation is done inside elements. This can change the meaning of the HTML document, and is mostly useful for debugging the HTML output. The implementation is inefficient, and you are normally better off using  or .6Show a single HTML element, without adding whitespace.Show a start tagShow an end tagRThe names of all elements which can represented using the empty tag short-hand.  ParentChild Element nameElement contentsDOCTYPE declarationDOCTYPE declarationDOCTYPE declaration* if the empty tag shorthand should be usedTag name Attributes"Whitespace to add after attributesTag name Whitespace to add after tag name- !"#$ %&' !$#"8 7 2SafeD9 SafeD ! SafeD0"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ SafeEMRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ SafeL Convert a  to D, converting characters that need to be escaped to HTML entities.?This converts a string, but keeps spaces as non-line-breakable.This converts a string, but keeps spaces as non-line-breakable, and adds line breaks between each of the strings in the input list.Copyright sign.Non-breaking space.Same as .SafeXThe DOCTYPE for XHTML 1.0 Strict.Output the HTML without adding newlines or spaces within the markup. This should be the most time and space efficient way to render HTML, though the ouput is quite unreadable.SOutputs indented HTML. Because space matters in HTML, the output is quite messy.TOutputs indented XHTML. Because space matters in HTML, the output is quite messy.Outputs indented HTML, with indentation inside elements. This can change the meaning of the HTML document, and is mostly useful for debugging the HTML output. The implementation is inefficient, and you are normally better off using  or .3The code of the "dominant" language of the webpage.All the , including a header. "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  RSTUVWXYZ[]\^_`adbcefghijklmnopqrstuvwxyz{|}~"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQSafeg Output the HTML without adding newlines or spaces within the markup. This should be the most time and space efficient way to render HTML, though the ouput is quite unreadable.SOutputs indented HTML. Because space matters in HTML, the output is quite messy.Outputs indented HTML, with indentation inside elements. This can change the meaning of the HTML document, and is mostly useful for debugging the HTML output. The implementation is inefficient, and you are normally better off using  or .  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ŀ  RSTUVWXYZ[]\^_`adbcefghijklmnopqrstuvwxyz{|}~"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ !Safez3KWe internally represent the Cell inside a Table with an object of the type  Int -> Int -> HtmlWhen we render it later, we find out how many columns or rows this cell will span over, and can include the correct colspan/rowspan command.(MrenderTable takes the HtmlTable, and renders it back into and Html object.kIf you can't be bothered with the above, then you can build simple tables with simpleTable. Just provide the attributes for the whole table, attributes for the cells (same for every cell), and a list of lists of cell contents, and this function will build the table for you. It does presume that all the lists are non-empty, and there is at least one list.Different length lists means that the last cell gets padded. If you want more power, then use the system above, or build tables explicitly. )34 SafeThe basic idea is you render your structure in the form of this tree, and then use treeHtml to turn it into a Html object with the structure explicit.This uses the above tree rendering function, and displays the Html as a tree structure, allowing debugging of what is actually getting produced.Safe "Safe Safe_Output the HTML without adding newlines or spaces within the markup. This should be the most time and space efficient way to render HTML, though the ouput is quite unreadable.SOutputs indented HTML. Because space matters in HTML, the output is quite messy.Outputs indented HTML, with indentation inside elements. This can change the meaning of the HTML document, and is mostly useful for debugging the HTML output. The implementation is inefficient, and you are normally better off using  or .  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  RSTUVWXYZ[]\^_`adbcefghijklmnopqrstuvwxyz{|}~"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ !(c) Andy Gill, and the Oregon Graduate Institute of Science and Technology, 1999-2001, (c) Bjorn Bringert, 2004-2006 BSD-style (see the file LICENSE)$Chris Dornan <chris@chrisdornan.com>StablePortableSafe  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~* !"#$%&'()*+, - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~              7 !"#$%&'()*+,-./012%xhtml-3000.2.2-KpFTweFoNBLIYhuD7YXBEBText.XHtml.StrictText.XHtml.FramesetText.XHtml.Table Text.XHtmlText.XHtml.TransitionalText.XHtml.BlockTableText.XHtml.InternalsText.XHtml.Frameset.ElementsText.XHtml.Frameset.AttributesText.XHtml.Strict.AttributesText.XHtml.Strict.ElementsText.XHtml.ExtrasText.XHtml.Debug"Text.XHtml.Transitional.Attributes Text.XHtml.Transitional.Elements CHANGEATTRS changeAttrsADDATTRS!HTMLtoHtmltoHtmlFromListHtmlHtmlAttr htmlAttrPair<< concatHtml+++noHtmlisNoHtmltagitag emptyAttrintAttrstrAttrhtmlAttrstringToHtmlStringprimHtmlshowHtmlFragmentrenderHtmlFragmentprettyHtmlFragmentframeframesetnoframes frameborder marginheight marginwidthnoresize scrollingactionalignaltaltcodearchivebaseborder bordercolor cellpadding cellspacingcheckedcodebasecolscolspancontentcoordsdisabledenctypeheighthrefhreflang httpequiv identifierismaplang maxlengthmethodmultiplenamenohrefrelrevrowsrowspanrulesselectedshapesizesrctheclasstheforthestylethetypetitleusemapvalignvaluewidthabbracronymaddressanchorareabdobig blockquotebodyboldbuttonbrcaptioncitecolcolgroupddefdefinedeldlistdterm emphasizefieldsetformh1h2h3h4h5h6headerhrimageinputinsitalicskeyboardlabellegendlimetanoscriptobjectolistoptgroupoption paragraphparamprequotesamplescriptselectsmallstrongstylesubsuptabletbodytdtextareatfootththeadthebasethecodethedivthehtmlthelinkthemapthespanthetitletrttulistvariableHotLink hotLinkURLhotLinkContentshotLinkAttributesURL stringToHtml lineToHtml linesToHtml primHtmlChar copyright spaceHtmlbulletphotlinkordList unordListdefListwidgetcheckboxhiddenradioresetsubmitpassword textfieldafileclickmapmenuguidocTypeshowHtml renderHtmlrenderHtmlWithLanguage prettyHtml HtmlTable HTMLTABLEcellabovebeside<->abovesbesides simpleTable$fShowHtmlTable$fHTMLHtmlTable$fHTMLTABLEHtml$fHTMLTABLEHtmlTableHtmlTreeHtmlLeafHtmlNodetreeHtml treeColors debugHtmlalink backgroundbgcolorclearcodecolorcompactfacehspacelinknoshadenowrapstarttargettextversionvlinkvspaceaquablackbluefuchsiagraygreenlimemaroonnavyolivepurpleredsilvertealyellowwhiteappletbasefontcenterdirfontiframeisindexthemenustrike underlinesingletrans getMatrix BlockTable showsTable showTableTableGHC.BaseString HtmlElement HtmlStringHtmlTagghc-prim GHC.Classes<showHtmlInternalrenderHtmlInternalprettyHtmlInternal showHtml' renderTag renderEndTagvalidHtmlITags$fSemigroupHtml GHC.TypesTruegetHtmlElements markupContent markupAttrs markupTagmkHtml renderHtml' prettyHtml' renderTable