860      !"#$%&'()*+,-.//Convenience type for just one row (or column). + To be used with combinators as follows:  example2 = : empty ^..^ col "memtest 1" [] ^|^ col "memtest 2" [] : ^||^ col "time test "[] ^|^ col "time test 2" [] 7 +.+ row "A 1" ["hog", "terrible", "slow", "slower"] 7 +.+ row "A 2" ["pig", "not bad", "fast", "slowest"]  +----+ > row "B 1" ["good", "awful", "intolerable", "bearable"] @ +.+ row "B 2" ["better", "no chance", "crawling", "amazing"] 9 +.+ row "B 3" ["meh", "well...", "worst ever", "ok"]   example = Table  (Group SingleLine 2 [ Group NoLine [Header "A 1", Header "A 2"] @ , Group NoLine [Header "B 1", Header "B 2", Header "B 3"]  ])  (Group DoubleLine B [ Group SingleLine [Header "memtest 1", Header "memtest 2"] F , Group SingleLine [Header "time test 1", Header "time test 2"]  ]) + [ ["hog", "terrible", "slow", "slower"] , , ["pig", "not bad", "fast", "slowest"] 4 , ["good", "awful" , "intolerable", "bearable"] 4 , ["better", "no chance", "crawling", "amazing"] - , ["meh", "well...", "worst ever", "ok"]  ] , -- Text.Tabular.AsciiArt.render example id  -- > -- || memtest 1 | memtest 2 || time test | time test 2 > -- ====++===========+===========++=============+============ > -- A 1 || hog | terrible || slow | slower > -- A 2 || pig | not bad || fast | slowest > -- ----++-----------+-----------++-------------+------------ > -- B 1 || good | awful || intolerable | bearable > -- B 2 || better | no chance || crawling | amazing > -- B 3 || meh | well... || worst ever | ok  #Retrieve the contents of a header   e ss h returns the same structure  as h3 except with all the text replaced by the contents  of ss. If ss, has too many cells, the excess is ignored. : If it has too few cells, the missing ones (at the end) ( and replaced with the empty contents e 2The idea is to deal with the fact that Properties : (e.g. borders) are not standalone cells but attributes 6 of a cell. A border is just a CSS decoration of a  TD element. squish  decorator f h applies f to every item  in the list represented by h (see  ),  additionally applying  decorator if the item is % followed by some kind of boundary So    o o o | o o o | o o    gets converted into    O O X O O X O O   Column header besides besides with a line besides with a double line below below with a line below with a double line      5for simplicity, we assume that each cell is rendered  on a single line (We stop rendering on the shortest list! max width for each column width specifications     !delim "!"!"!"#5for simplicity, we assume that each cell is rendered  on a single line ###$%&'1Convenience function to add a CSS string to your  HTML document (5You need to incorporate some CSS into your file with  the classes  thinbottom,  thinright,  thickbottom  and  thickright. See ' $%&'($%&'($%&'()*>column header specifications including label (l,h,p{3cm},etc) +,-./)*+,-./)*+,-./)*+,-./0       !"#$ !  %&'( )*+,&%-tabular-0.2.2.0 Text.TabularText.Tabular.AsciiArtText.Tabular.SimpleTextText.Tabular.CsvText.Tabular.HtmlText.Tabular.Latex SemiTableTableHeaderGroup Properties DoubleLine SingleLineNoLineheaderContents zipHeader flattenHeadersquishemptycolcolHrowrowHbesidebelow^..^^|^^||^+.++----++====+render renderColumns renderHLine renderHLine'padLeftvAttrhAttrcss defaultCss renderUsinghline addTableNllabel