Table¶
Generic table structure which simplify the conversion from docx table format to CALS or HTML tables.
- class benker.table.ColView(table, pos, styles=None, nature=None)¶
Bases:
benker.table.TableView
A view on the table cells for a given column.
- can_catch(cell)¶
Check if a cell can be caught by that view.
- Parameters
cell (benker.cell.Cell) – table cell
- Returns
True
if the cell intercept to this view.
- can_own(cell)¶
Check if a cell can be stored it that view.
- Parameters
cell (benker.cell.Cell) – table cell
- Returns
True
if the cell belong to this view.
- property col_pos¶
Column position in the table (1-based).
- insert_cell(content, styles=None, nature=None, width=1, height=1)¶
Insert a new cell in the column at the next free position, or at the end.
- Parameters
content – User-defined cell content. It can be of any type:
None
,str
,int
,float
, a container (list
), a XML element, etc. The same content can be shared by several cells, it’s your own responsibility to handle the copy (or deep copy) of the content reference when needed.styles (typing.Dict[str, str]) – User-defined cell styles: a dictionary of key-value pairs. This values are useful to store some HTML-like styles (border-style, border-width, border-color, vertical-align, text-align, etc.). Of course, we are not tied to the HTML-like styles, you can use your own list of styles.
width (int) – Width of the cell (columns spanning), default to 1.
height (int) – Height of the cell (rows spanning), default to 1.
- Variables
nature – a way to distinguish the body cells, from the header and the footer. The default value is
None
, but you can use “body”, “header”, “footer” or whatever is suitable for your needs. If set toNone
, the cell nature is inherited from the column nature.
Changed in version 0.4.2: The nature of a cell is inherited from its parent’s column.
- class benker.table.RowView(table, pos, styles=None, nature=None)¶
Bases:
benker.table.TableView
A view on the table cells for a given row.
- can_catch(cell)¶
Check if a cell can be caught by that view.
- Parameters
cell (benker.cell.Cell) – table cell
- Returns
True
if the cell intercept to this view.
- can_own(cell)¶
Check if a cell can be stored it that view.
- Parameters
cell (benker.cell.Cell) – table cell
- Returns
True
if the cell belong to this view.
- insert_cell(content, styles=None, nature=None, width=1, height=1)¶
Insert a new cell in the row at the next free position, or at the end.
- Parameters
content – User-defined cell content. It can be of any type:
None
,str
,int
,float
, a container (list
), a XML element, etc. The same content can be shared by several cells, it’s your own responsibility to handle the copy (or deep copy) of the content reference when needed.styles (typing.Dict[str, str]) – User-defined cell styles: a dictionary of key-value pairs. This values are useful to store some HTML-like styles (border-style, border-width, border-color, vertical-align, text-align, etc.). Of course, we are not tied to the HTML-like styles, you can use your own list of styles.
width (int) – Width of the cell (columns spanning), default to 1.
height (int) – Height of the cell (rows spanning), default to 1.
- Variables
nature – a way to distinguish the body cells, from the header and the footer. The default value is
None
, but you can use “body”, “header”, “footer” or whatever is suitable for your needs. If set toNone
, the cell nature is inherited from the row nature.
Changed in version 0.4.2: The nature of a cell is inherited from its parent’s row.
- property row_pos¶
Row position in the table (1-based).
- class benker.table.Table(cells=None, styles=None, nature=None)¶
Bases:
benker.styled.Styled
,collections.abc.MutableMapping
Table data structure used to simplify conversion to CALS or HTML.
Short demonstration:
>>> from benker.cell import Cell >>> from benker.table import Table >>> table = Table(styles={'frame': 'all'}) >>> table[(1, 1)] = Cell("one") >>> table.rows[1].insert_cell("two") >>> table[(2, 1)] <Cell('two', styles={}, nature=None, x=2, y=1, width=1, height=1)> >>> table.cols[1].insert_cell("alpha") >>> table.cols[2].insert_cell("beta") >>> (1, 2) in table True >>> del table[(1, 2)] >>> (1, 2) in table False >>> len(table) 3 >>> for cell in table: ... print(cell) one two beta >>> for row in table.rows: ... print(row) [one, two] [beta] >>> table.merge((1, 2), (2, 2)) >>> print(table) +-----------+-----------+ | one | two | +-----------------------+ | beta | +-----------------------+ >>> table.expand((1, 1), width=3) >>> print(table) +-----------------------------------------------+ | onetwo | +-----------------------+-----------+-----------+ | beta | | | +-----------------------+-----------+-----------+
- Variables
styles –
User-defined table styles: a dictionary of key-value pairs. This values are useful to store some HTML-like styles (border-style, border-width, border-color, vertical-align, text-align, etc.). Of course, we are not tied to the HTML-like styles, you can use your own list of styles.
Note
The style dictionary is always copied: in other words, key-value pairs are copied but a shallow copy is done for the values (in general, it is not a problem if you use non-mutable values like
str
).nature –
A table can have a nature: a way to distinguish the body cells, from the header and the footer. The default value is
None
, but you can use “body”, “header”, “footer” or whatever is suitable for your needs. This kind of information is in general not stored in the styles, even if it is similar.
- property bounding_box¶
Bounding box of the table (
None
if the table is empty).- Return type
- Returns
The bounding box.
- expand(coord, width=0, height=0, content_appender=None)¶
- merge(start, end, content_appender=None)¶
- nature¶
Cell nature used to distinguish the body cells, from the header and the footer.
- class benker.table.TableView(table, pos, styles=None, nature=None)¶
Bases:
benker.styled.Styled
Base class of
RowView
andColView
used to create a view on the table cells for a given row or column.See also:
TableViewList
- adopt_cell(cell)¶
Event handler called by the system when a cell is about to be inserted in the table.
- can_catch(cell)¶
Check if a cell can be caught by that view.
- Parameters
cell (benker.cell.Cell) – table cell
- Returns
True
if the cell intercept to this view.
- can_own(cell)¶
Check if a cell can be stored it that view.
- Parameters
cell (benker.cell.Cell) – table cell
- Returns
True
if the cell belong to this view.
- property caught_cells¶
List of cells caught (intercepted) by this view.
- property owned_cells¶
List of cells owned by this view.
- class benker.table.TableViewList(table, view_cls)¶
Bases:
object
This class defined a (simplified) list of views.
Short demonstration:
>>> from benker.cell import Cell >>> from benker.table import Table >>> from benker.table import ColView >>> from benker.table import RowView >>> from benker.table import TableViewList >>> red = Cell('red', x=1, y=1, height=2) >>> pink = Cell('pink', x=2, y=1, width=2) >>> blue = Cell('blue', x=2, y=2) >>> table = Table([red, pink, blue]) >>> print(table) +-----------+-----------------------+ | red | pink | | +-----------+-----------+ | | blue | | +-----------+-----------+-----------+ >>> cols = TableViewList(table, ColView) >>> len(cols) 3 >>> rows = TableViewList(table, RowView) >>> len(rows) 2 >>> for pos, col in enumerate(cols, 1): ... print("col #{pos}: {col}".format(pos=pos, col=str(col))) col #1: [red] col #2: [pink, blue] col #3: [] >>> cols[3].insert_cell("yellow") >>> print(table) +-----------+-----------------------+ | red | pink | | +-----------+-----------+ | | blue | yellow | +-----------+-----------+-----------+
- adopt_cell(cell)¶
Adopt a new cell in the views.
- Parameters
cell (benker.cell.Cell) – New cell to adopt
- refresh_all()¶
Cleanup and refresh all the views, taking into account the cells which are in the table grid.