| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Text.Tabular
Description
Note: the core types and comibnators from this module are from Toxaris in a #haskell conversation on 2008-08-24
Synopsis
- data Properties
- data Header h
- = Header h
- | Group Properties [Header h]
- data Table rh ch a = Table (Header rh) (Header ch) [[a]]
- headerContents :: Header h -> [h]
- zipHeader :: h -> [h] -> Header a -> Header (h, a)
- flattenHeader :: Header h -> [Either Properties h]
- squish :: (Properties -> b -> b) -> (h -> b) -> Header h -> [b]
- data SemiTable h a = SemiTable (Header h) [a]
- empty :: Table rh ch a
- col :: ch -> [a] -> SemiTable ch a
- colH :: ch -> SemiTable ch a
- row :: rh -> [a] -> SemiTable rh a
- rowH :: rh -> SemiTable rh a
- beside :: Properties -> Table rh ch a -> SemiTable ch a -> Table rh ch a
- below :: Properties -> Table rh ch a -> SemiTable rh a -> Table rh ch a
- (^..^) :: Table rh ch a -> SemiTable ch a -> Table rh ch a
- (^|^) :: Table rh ch a -> SemiTable ch a -> Table rh ch a
- (^||^) :: Table rh ch a -> SemiTable ch a -> Table rh ch a
- (+.+) :: Table rh ch a -> SemiTable rh a -> Table rh ch a
- (+----+) :: Table rh ch a -> SemiTable rh a -> Table rh ch a
- (+====+) :: Table rh ch a -> SemiTable rh a -> Table rh ch a
Documentation
data Properties Source #
Constructors
| NoLine | |
| SingleLine | |
| DoubleLine |
Instances
| Show Properties Source # | |
Defined in Text.Tabular Methods showsPrec :: Int -> Properties -> ShowS # show :: Properties -> String # showList :: [Properties] -> ShowS # | |
Constructors
| Header h | |
| Group Properties [Header h] |
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 id id id example -- -- || 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
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
flattenHeader :: Header h -> [Either Properties h] Source #
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
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"]