*vital/Text/Table.txt*		Character table library.

Maintainer: kamichidu <c.kamunagi at gmail.com>

==============================================================================
CONTENTS			*Vital.Text.Table-contents*

INTRODUCTION			|Vital.Text.Table-introduction|
INTERFACE			|Vital.Text.Table-interface|
  FUNCTIONS			  |Vital.Text.Table-functions|
  OBJECTS			  |Vital.Text.Table-objects|

==============================================================================
INTRODUCTION			*Vital.Text.Table-introduction*

*Vital.Text.Table* is a character table formatter. It will make a character
table such as below:

	+---------+---------+---------+
	| header1 | header2 | header3 | <- (A) Header Row
	+---------+---------+---------+
	| r1c1    | r1c2    | r1c3    | <- (B) Body Row
	| r2c1    | r2c2    | r2c3    |
	| r3c1    | r3c2    | r3c3    |
	+---------+---------+---------+
	| footer1 | footer2 | footer3 | <- (C) Footer Row
	+---------+---------+---------+ <- (D) Horizontal Border
	^
	|
       (E) Vertical Border

	(A) Header Row
		A table header. It is configured by
		|Vital.Text.Table-Table.header()|.
	(B) Body Row
		A table body. It is configured by
		|Vital.Text.Table-Table.rows()| or
		|Vital.Text.Table-Table.add_row()|.
	(C) Footer Row
		A table footer. It is configured by
		|Vital.Text.Table-Table.footer()|.
	(D) Horizontal Border
		A horizontal border. It is configured by
		|Vital.Text.Table-Table.hborder()|.
	(E) Vertical Border
		A vertical border. It is configured by
		|Vital.Text.Table-Table.vborder()|.

|Vital.Text.Table| is easy to use. You can make a character table such above
by:
>
    let s:T = vital#{plugin-name}#new().import('Text.Table')
    let s:table = s:T.new({
    \   'columns': [{}, {}, {}],
    \   'header':  ['header1', 'header2', 'header3'],
    \   'footer':  ['footer1', 'footer2', 'footer3'],
    \})

    call s:table.rows([
    \   ['r1c1', 'r1c2', 'r1c3'],
    \   ['r2c1', 'r2c2', 'r2c3'],
    \   ['r3c1', 'r3c2', 'r3c3'],
    \])

    echo s:table.stringify()
<
And you can customize the style of table by
|Vital.Text.Table-Table.border_style()|.

==============================================================================
INTERFACE			*Vital.Text.Table-interface*

------------------------------------------------------------------------------
FUNCTIONS			*Vital.Text.Table-functions*

new([{config}])			*Vital.Text.Table.new()*
	Creates a new Table object(|Vital.Text.Table-Table|).
	You can configure a new Table object via {config}(|Dictionary|).
	{config} takes some attributes below:

	hborder (Default: 1)
		Same to |Vital.Text.Table-Table.hborder()|.
	vborder (Default: 1)
		Same to |Vital.Text.Table-Table.vborder()|.
	columns (Default: [])
		Same to |Vital.Text.Table-Table.columns()|.
	header (Default: [])
		Same to |Vital.Text.Table-Table.header()|.
	rows (Default: [])
		Same to |Vital.Text.Table-Table.rows()|.
	footer (Default: [])
		Same to |Vital.Text.Table-Table.footer()|.

==============================================================================
OBJECTS				*Vital.Text.Table-objects*

------------------------------------------------------------------------------
Table Object			*Vital.Text.Table-Table*

				*Vital.Text.Table-Table.hborder()*
Table.hborder()
	Returns 1 If horizontal border will be drawn. Otherwise, 0.
Table.hborder({hborder})
	Controls to make a table with/without horizontal border.
	e.g. >
	table.hborder(1)
<

				*Vital.Text.Table-Table.border_style()*
Table.border_style()
	Returns a border style object(|Vital.Text.Table-BorderStyle|).
Table.border_style({style})
	Sets a border style object(). See |Vital.Text.Table-BorderStyle|
	section for more details.
	e.g. >
	table.border_style({
	\ 'joint': {
	\   'row': '+',
	\ },
	\ 'border': {
	\   'left':  '<',
	\   'right': '>',
	\ },
	\})
<

				*Vital.Text.Table-Table.vborder()*
Table.vborder()
	Returns 1 If vertical border will be drawn. Otherwise, 0.
Table.vborder({vborder})
	Controls to make a table with/without vertical border.
	e.g. >
	table.vborder(1)
<

				*Vital.Text.Table-Table.columns()*
Table.columns()
	Returns column configuration objects.
Table.columns({columns})
	Sets column configuration objects(|Dictionary|). If its object already
	has one or more rows, it will throws an exception. See
	|Vital.Text.Table-ColumnConfig| section for more details.
	e.g. >
	table.columns([
	\ {'halign': 'left',   'valign': 'top',    'width': 30},
	\ {'halign': 'right',  'valign': 'center',            },
	\ {'halign': 'center', 'valign': 'bottom',            },
	\ {                                                   },
	\])
<

				*Vital.Text.Table-Table.add_column()*
Table.add_column({column})
	Adds column configuration object. If its object already has one or
	more rows, it will throws an exception. See
	|Vital.Text.Table-ColumnConfig| section for more details.
	e.g. >
	table.add_column({'halign': 'left', 'valign': 'top', 'width': 30})
<

				*Vital.Text.Table-Table.header()*
Table.header()
	Returns a header row object(|Vital.Text.Table-Row|).
Table.header({headers})
	Sets a header row object(|Vital.Text.Table-Row|). If given
	{headers} size is greater than its columns size, it will throws an
	exception.
	e.g. >
	table.header(['header1', 'header1', 'header1'])
<

				*Vital.Text.Table-Table.rows()*
Table.rows()
	Returns a row object(|Vital.Text.Table-Row|).
Table.rows({rows})
	Sets a row object(|Vital.Text.Table-Row|). If given any row of {rows}
	size is greater than its columns size, it will throws an exception.
	e.g. >
	table.rows([
	\ ['row1column1', 'row1column2', 'row1column3'],
	\ ['row2column1', 'row2column2', 'row2column3'],
	\ ['row3column1', 'row3column2', 'row3column3'],
	\])
<

				*Vital.Text.Table-Table.add_row()*
Table.add_row({row})
	Adds a row object(|Vital.Text.Table-Row|). If given {row} size is
	greater than its columns size, it will throws an exception.
	e.g. >
	table.add_row(['column1', 'column2', 'column3'])
<

				*Vital.Text.Table-Table.footer()*
Table.footer()
	Returns a footer row object(|Vital.Text.Table-Row|).
Table.footer({footers})
	Sets a footer row object(|Vital.Text.Table-Row|). If given {footer}
	size is greater than its columns size, it will throws an exception.
	e.g. >
	table.footer(['footer1', 'footer2', 'footer3'])
<

				*Vital.Text.Table-Table.stringify()*
Table.stringify([{tstyle}])
	Makes a table by configuration. Returns a |List| which has each table
	row strings. And it can takes a table style object
	(|Vital.Text.Table-TableStyle|).
	e.g. >
	" [
	"   ['+------+------+------+'],
	"   ['| h1   | h2   | h3   |'],
	"   ['+------+------+------+'],
	"   ['| r1c1 | r1c2 | r1c3 |'],
	"   ['| r2c1 | r2c2 | r2c3 |'],
	"   ['+------+------+------+'],
	"   ['| f1   | f2   | f3   |'],
	"   ['+------+------+------+'],
	" ]
	echo table.stringify()
<

------------------------------------------------------------------------------
Row Object			*Vital.Text.Table-Row*

Row Object is a |List| containing |String|, |Number|, |Float| values.

------------------------------------------------------------------------------
Column Config Object		*Vital.Text.Table-ColumnConfig*

ColumnConfig.halign		*Vital.Text.Table-ColumnConfig.halign*
	Specify a horizontal alignment for its column. "left", "right" and
	"center" are supported. Default is "left".

	+---------------------------+
	| "left"  "center"  "right" |
	+---------------------------+

ColumnConfig.valign		*Vital.Text.Table-ColumnConfig.valign*
	Specify a vertical alignment for its column. "top", "bottom" and
	"center" are supported. Default is "top".

	+----------+
	| "top"    |
	| "center" |
	| "bottom" |
	+----------+

ColumnConfig.width		*Vital.Text.Table-ColumnConfig.width*
	Specify a column width for its column. It is number of characters
	similar to |'columns'|. Default is depends on data(no wrapping).

	<- width  ->
	+----------+
	|          |
	+----------+

------------------------------------------------------------------------------
Table Style Object		*Vital.Text.Table-TableStyle*

TableStyle.max_width		*Vital.Text.Table-TableStyle.max_width*
	Specify a table width for whole table. It is number of characters
	similar to |'columns'|. Default is 0 (unlimited).

	<- width   ->
	+---+---+---+
	|   |   |   |
	+---+---+---+

------------------------------------------------------------------------------
Border Style Object		*Vital.Text.Table-BorderStyle*

BorderStyle.joint		*Vital.Text.Table-BorderStyle.joint*
	Configures a border joint character(s). It's okay to use multi-byte
	characters and multiple characters. The kinds of joint you can specify
	by |Dictionary| are described below:

	(A) top_left      (B) top      (C) top_right
	(D) head_left     (E) head     (F) head_right
	(G) left          (H) row      (I) right
	(J) foot_left     (K) foot     (L) foot_right
	(M) bottom_left   (N) bottom   (O) bottom_right

	(A)------(B)------(B)------(C)
	 |        |        |        |
	(D)------(E)------(E)------(F)
	 |        |        |        |
	(G)------(H)------(H)------(I)
	 |        |        |        |
	(J)------(K)------(K)------(L)
	 |        |        |        |
	(M)------(N)------(N)------(O)

BorderStyle.border		*Vital.Text.Table-BorderStyle.border*

	Configures a border character(s). It's okay to use multi-byte
	characters and multiple characters. The kinds of border you can
	specify by |Dictionary| are described below:

	(a) top      (b) head     (c) row
	(d) foot     (e) bottom   (f) left
	(g) column   (h) right

	 +---(a)---+---(a)---+---(a)---+
	(f)       (g)       (g)       (h)
	 +---(b)---+---(b)---+---(b)---+
	(f)       (g)       (g)       (h)
	 +---(c)---+---(c)---+---(c)---+
	(f)       (g)       (g)       (h)
	 +---(d)---+---(d)---+---(d)---+
	(f)       (g)       (g)       (h)
	 +---(e)---+---(e)---+---(e)---+

==============================================================================
vim:tw=78:fo=tcq2mM:ts=8:ft=help:norl
