L      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~portablestable$Chris Dornan <chris@chrisdornan.com> Creates a (1x1) table entry Composes tables vertically. Composes tables horizontally. 2trans flips (transposes) over the x and y axis of 6 the table. It is only used internally, and typically . in pairs, ie. (flip ... munge ... (un)flip).  1This 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.         portablestable$Chris Dornan <chris@chrisdornan.com>*4HTML is the class of things that can be validly put 0 inside an HTML tag. So this can be one or more  elements,  or a  , for example.   Attributes with name and value. <A important property of Html is that all strings inside the 0 structure are already in Html friendly format. tag with internal markup )..just..plain..normal..text... but using & copy; and & amb;, etc. &Put something inside an HTML element. Parent Child  2Create a piece of HTML which is the concatenation . of two things which can be made into HTML. An empty piece of HTML. 1Checks whether the given piece of HTML is empty. *Constructs an element with a custom name.  Element name Element contents .Constructs 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 . EOutput the HTML without adding newlines or spaces within the markup. ; This should be the most time and space efficient way to 6 render HTML, though the ouput is quite unreadable. DOCTYPE declaration 0Outputs indented HTML. Because space matters in $ HTML, the output is quite messy. DOCTYPE declaration 9Outputs indented HTML, with indentation inside elements. : This can change the meaning of the HTML document, and 3 is mostly useful for debugging the HTML output. ; The implementation is inefficient, and you are normally  better off using showHtml or  renderHtml. DOCTYPE declaration <Render a piece of HTML without adding a DOCTYPE declaration 7 or root element. Does not add any extra whitespace. ERender a piece of indented HTML without adding a DOCTYPE declaration B or root element. Only adds whitespace where it does not change  the meaning of the document. FRender 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 3 is mostly useful for debugging the HTML output. ; The implementation is inefficient, and you are normally  better off using  or . 7Show a single HTML element, without adding whitespace. Show a start tag + if the empty tag shorthand should be used  Tag name  Attributes #Whitespace to add after attributes  Show an end tag  Tag name !Whitespace to add after tag name !DThe names of all elements which can represented using the empty tag  short-hand. *   !*    !     "!"#$%&'()*+,-./0123456789:;<=>?@AB"!"#$%&'()*+,-./0123456789:;<=>?@AB"!"#$%&'()*+,-./0123456789:;<=>?@AB CDEFGCDEFGCDEFG 0HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw0HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw0HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw xyzxyzxyz M{|}~M{|}~M{|}~ Convert a   to  , converting 8 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, G and adds line breaks between each of the strings in the input list. Copyright sign. Non-breaking space. Same as . The DOCTYPE for XHTML 1.0 Strict. EOutput the HTML without adding newlines or spaces within the markup. ; This should be the most time and space efficient way to 6 render HTML, though the ouput is quite unreadable. 0Outputs indented HTML. Because space matters in $ HTML, the output is quite messy. 1Outputs indented XHTML. Because space matters in $ HTML, the output is quite messy. The code of the dominant language of the webpage. All the , including a header. 9Outputs indented HTML, with indentation inside elements. : This can change the meaning of the HTML document, and 3 is mostly useful for debugging the HTML output. ; The implementation is inefficient, and you are normally  better off using  or .  HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw{|}~ {|}~HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw"EOutput the HTML without adding newlines or spaces within the markup. ; This should be the most time and space efficient way to 6 render HTML, though the ouput is quite unreadable. 0Outputs indented HTML. Because space matters in $ HTML, the output is quite messy. 9Outputs indented HTML, with indentation inside elements. : This can change the meaning of the HTML document, and 3 is mostly useful for debugging the HTML output. ; The implementation is inefficient, and you are normally  better off using  or .  CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ {|}~xyzHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwCDEFG8We internally represent the Cell inside a Table with an  object of the type   Int -> Int -> Html 6When 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. #$%&:renderTable takes the HtmlTable, and renders it back into  and Html object.  If you can''t be bothered with the above, then you + can build simple tables with simpleTable. 2 Just provide the attributes for the whole table, 1 attributes for the cells (same for every cell), ' and a list of lists of cell contents, 1 and this function will build the table for you. 3 It does presume that all the lists are non-empty, ! and there is at least one list. 0Different length lists means that the last cell + gets padded. If you want more power, then 3 use the system above, or build tables explicitly.  8The 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 9 Html as a tree structure, allowing debugging of what is  actually getting produced. '()*EOutput the HTML without adding newlines or spaces within the markup. ; This should be the most time and space efficient way to 6 render HTML, though the ouput is quite unreadable. 0Outputs indented HTML. Because space matters in $ HTML, the output is quite messy. 9Outputs indented HTML, with indentation inside elements. : This can change the meaning of the HTML document, and 3 is mostly useful for debugging the HTML output. ; The implementation is inefficient, and you are normally  better off using  or .   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ {|}~xyz HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwCDEFG!"#$%&'()*+,-./0123456789:;<=>?@ABportablestable$Chris Dornan <chris@chrisdornan.com>  !"#$%&'()*+,-./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 { | } ~       ]] !"#$%&'()*+,-./0xhtml-3000.2.0.2Text.XHtml.StrictText.XHtml.TransitionalText.XHtml.FramesetText.XHtml.TableText.XHtml.DebugText.XHtml.BlockTableText.XHtml.Internals Text.XHtml.Transitional.Elements"Text.XHtml.Transitional.AttributesText.XHtml.Frameset.AttributesText.XHtml.Strict.AttributesText.XHtml.Frameset.ElementsText.XHtml.Strict.ElementsText.XHtml.Extras Text.XHtmlADDATTRS!HTMLtoHtmltoHtmlFromListHtmlHtmlAttr<< concatHtml+++noHtmlisNoHtmltagitag emptyAttrintAttrstrAttrhtmlAttrstringToHtmlStringprimHtmlshowHtmlFragmentrenderHtmlFragmentprettyHtmlFragmentappletbasefontcenterdirfontiframeisindexthemenustrike underlinealink backgroundbgcolorclearcodecolorcompactfacehspacelinknoshadenowrapstarttargettextversionvlinkvspaceaquablackbluefuchsiagraygreenlimemaroonnavyolivepurpleredsilvertealyellowwhite frameborder marginheight marginwidthnoresize scrollingactionalignaltaltcodearchivebaseborder bordercolor cellpadding cellspacingcheckedcodebasecolscolspancontentcoordsdisabledenctypeheighthrefhreflang httpequiv identifierismaplang maxlengthmethodmultiplenamenohrefrelrevrowsrowspanrulesselectedshapesizesrctheclasstheforthestylethetypetitleusemapvalignvaluewidthframeframesetnoframesabbracronymaddressanchorareabdobig blockquotebodyboldbuttonbrcaptioncitecolcolgroupddefdefinedeldlistdterm emphasizefieldsetformh1h2h3h4h5h6headerhrimageinputinsitalicskeyboardlabellegendlimetanoscriptobjectolistoptgroupoption paragraphparamprequotesamplescriptselectsmallstrongstylesubsuptabletbodytdtextareatfootththeadthebasethecodethedivthehtmlthelinkthemapthespanthetitletrttulistvariableHotLink hotLinkURLhotLinkContentshotLinkAttributesURL stringToHtml lineToHtml linesToHtml primHtmlChar copyright spaceHtmlbulletphotlinkordList unordListdefListwidgetcheckboxhiddenradioresetsubmitpassword textfieldafileclickmapmenuguidocTypeshowHtml renderHtmlrenderHtmlWithLanguage prettyHtml HtmlTable HTMLTABLEcellabovebeside<->abovesbesides simpleTableHtmlTreeHtmlNodeHtmlLeaftreeHtml treeColors debugHtml BlockTableTableTableIsingletranscombine getMatrix showsTable showTableGHC.BaseStringgetHtmlElements HtmlElementHtmlTag markupTag markupAttrs markupContent HtmlString GHC.Classes<mkHtmlshowHtmlInternalrenderHtmlInternalprettyHtmlInternal showHtml' renderHtml' prettyHtml' renderTagghc-prim GHC.TypesTrue renderEndTagvalidHtmlITags mkHtmlTable renderTablebgcolor' underline' xsmallFont