tabular-0.1: Two-dimensional data tables with rendering functions

Text.Tabular

Contents

Description

Note: the core types and comibnators from this module are from Toxaris in a #haskell conversation on 2008-08-24

Synopsis

Documentation

data Header h Source

Constructors

Header h 
Group Properties [Header h] 

Instances

data Table a Source

 example = Table
   (Group SingleLine
      [ Group NoLine [Header "A 1", Header "A 2"]
      , Group NoLine [Header "B 1", Header "B 2", Header "B 3"]
      ])
   (Group DoubleLine
      [ Group SingleLine [Header "memtest 1", Header "memtest 2"]
      , Group SingleLine [Header "time test 1", Header "time test 2"]
      ])
   [ ["hog", "terrible", "slow", "slower"]
   , ["pig", "not bad",  "fast", "slowest"]
   , ["good", "awful" ,  "intolerable", "bearable"]
   , ["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

Constructors

Table (Header String) (Header String) [[a]] 

Helper functions for rendering

headerStrings :: Header String -> [String]Source

Retrieve the strings in a header

zipHeader :: h -> [h] -> Header a -> Header (h, a)Source

zipHeader e ss h returns the same structure as h 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

squish :: (Properties -> b -> b) -> (h -> b) -> Header h -> [b]Source

The idea is to deal with the fact that Properties (e.g. borders) are not standalone cells but attributes 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 flattenHeader), 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

Combinators

data SemiTable a Source

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" []
   +.+ row "A 1" ["hog", "terrible", "slow", "slower"]
   +.+ row "A 2" ["pig", "not bad", "fast", "slowest"]
   +----+
       row "B 1" ["good", "awful", "intolerable", "bearable"]
   +.+ row "B 2" ["better", "no chance", "crawling", "amazing"]
   +.+ row "B 3" ["meh",  "well...", "worst ever", "ok"]

Constructors

SemiTable (Header String) [a] 

col :: String -> [a] -> SemiTable aSource

colH :: String -> SemiTable aSource

Column header

row :: String -> [a] -> SemiTable aSource