# gridtables Parser for reStructuredText-style grid tables. This package provides a parser for plain-text representations of tables, like the one given below. ``` +---------------------+-----------------------+ | Location | Temperature 1961-1990 | | | in degree Celsius | | +-------+-------+-------+ | | min | mean | max | +=====================+=======+=======+=======+ | Antarctica | -89.2 | N/A | 19.8 | +---------------------+-------+-------+-------+ | Earth | -89.2 | 14 | 56.7 | +---------------------+-------+-------+-------+ ``` ## Character widths The tables are intended to look good when viewed in a monospace font. Therefore, wide and full-width characters, as those in East Asian scripts, are counted as two characters. ## Column alignments The parser re-implements a table extensions from John MacFarlane's pandoc, namely support for column-wide cell alignments. The alignment of cells is determined by placing colons in the row that separates the table head from the body, like so: +------+--------+-------+ | left | center | right | +:=====+:======:+======:+ | 1 | 2 | 3 | +------+--------+-------+ The first line must be used for headless tables: +:-----+:------:+------:+ | left | center | right | +------+--------+-------+ | a 1 | b 2 | c 3 | +------+--------+-------+ ## Algorithm The cell tracing algorithm used in this package has been translated from the original Python implementation for reStructuredText. The parser has been placed in the public domain. ## Usage The usual way to use this package will be to use it as part of a parsec parser: ``` haskell main :: IO () main = do let gt = T.unlines [ "+------+--------+-------+" , "| left | center | right |" , "+:=====+:======:+======:+" , "| 1 | 2 | 3 |" , "+------+--------+-------+" ] in print (runParser GT.gridTable () "table" gt) ``` Use `traceLines :: [Text] -> Maybe (GridTable [Text])`, if the table's raw lines have been retrieved in a different way.