Hets - the Heterogeneous Tool Set
Copyright(c) Eric Kow <E.Y.Kow@brighton.ac.uk>
LicenseBSD3
MaintainerChristian.Maeder@dfki.de
Stabilityprovisional
Portabilityportable
Safe HaskellSafe

Common.Lib.Tabular

Description

 
Synopsis

Documentation

data Header h Source #

Constructors

Header h 
Group Properties [Header h] 

Instances

Instances details
Functor Header Source # 
Instance details

Defined in Common.Lib.Tabular

Methods

fmap :: (a -> b) -> Header a -> Header b

(<$) :: a -> Header b -> Header a

data Table rh ch 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"]
  ]
> putStr $ render id id id example
+-----++-----------+-----------++-------------+-------------+
|     || memtest 1 | memtest 2 || time test 1 | 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 rh) (Header ch) [[a]] 

Helper functions for rendering

headerContents :: Header h -> [h] Source #

Retrieve the contents of 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 h 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 h) [a] 

empty :: Table rh ch a Source #

col :: ch -> [a] -> SemiTable ch a Source #

colH :: ch -> SemiTable ch a Source #

Column header

row :: rh -> [a] -> SemiTable rh a Source #

rowH :: rh -> SemiTable rh a Source #

beside :: Properties -> Table rh ch a -> SemiTable ch a -> Table rh ch a Source #

below :: Properties -> Table rh ch a -> SemiTable rh a -> Table rh ch a Source #

(^..^) :: Table rh ch a -> SemiTable ch a -> Table rh ch a Source #

besides

(^|^) :: Table rh ch a -> SemiTable ch a -> Table rh ch a Source #

besides with a line

(^||^) :: Table rh ch a -> SemiTable ch a -> Table rh ch a Source #

besides with a double line

(+.+) :: Table rh ch a -> SemiTable rh a -> Table rh ch a Source #

below

(+----+) :: Table rh ch a -> SemiTable rh a -> Table rh ch a Source #

below with a line

(+====+) :: Table rh ch a -> SemiTable rh a -> Table rh ch a Source #

below with a double line

ascii art

render :: (rh -> String) -> (ch -> String) -> (a -> String) -> Table rh ch a -> String Source #

for simplicity, we assume that each cell is rendered on a single line

renderColumns Source #

Arguments

:: [Int]

max width for each column

-> Header String 
-> String 

We stop rendering on the shortest list!

renderHLine Source #

Arguments

:: [Int]

width specifications

-> Header String 
-> Properties 
-> [String] 

renderHLine' :: [Int] -> Char -> Header String -> String Source #