Skip to content

Commit

Permalink
tbl: add Table.table_direction getter
Browse files Browse the repository at this point in the history
  • Loading branch information
Steve Canny committed Feb 21, 2015
1 parent db70e4f commit d4ca18d
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 15 deletions.
25 changes: 13 additions & 12 deletions docx/oxml/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,18 +131,19 @@ def OxmlElement(nsptag_str, attrs=None, nsdecls=None):
CT_Row, CT_Tbl, CT_TblGrid, CT_TblGridCol, CT_TblLayoutType, CT_TblPr,
CT_TblWidth, CT_Tc, CT_TcPr, CT_VMerge
)
register_element_cls('w:gridCol', CT_TblGridCol)
register_element_cls('w:gridSpan', CT_DecimalNumber)
register_element_cls('w:tbl', CT_Tbl)
register_element_cls('w:tblGrid', CT_TblGrid)
register_element_cls('w:tblLayout', CT_TblLayoutType)
register_element_cls('w:tblPr', CT_TblPr)
register_element_cls('w:tblStyle', CT_String)
register_element_cls('w:tc', CT_Tc)
register_element_cls('w:tcPr', CT_TcPr)
register_element_cls('w:tcW', CT_TblWidth)
register_element_cls('w:tr', CT_Row)
register_element_cls('w:vMerge', CT_VMerge)
register_element_cls('w:bidiVisual', CT_OnOff)
register_element_cls('w:gridCol', CT_TblGridCol)
register_element_cls('w:gridSpan', CT_DecimalNumber)
register_element_cls('w:tbl', CT_Tbl)
register_element_cls('w:tblGrid', CT_TblGrid)
register_element_cls('w:tblLayout', CT_TblLayoutType)
register_element_cls('w:tblPr', CT_TblPr)
register_element_cls('w:tblStyle', CT_String)
register_element_cls('w:tc', CT_Tc)
register_element_cls('w:tcPr', CT_TcPr)
register_element_cls('w:tcW', CT_TblWidth)
register_element_cls('w:tr', CT_Row)
register_element_cls('w:vMerge', CT_VMerge)

from .text.font import (
CT_Color, CT_Fonts, CT_HpsMeasure, CT_RPr, CT_Underline,
Expand Down
13 changes: 13 additions & 0 deletions docx/oxml/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,18 @@ class CT_Tbl(BaseOxmlElement):
tblGrid = OneAndOnlyOne('w:tblGrid')
tr = ZeroOrMore('w:tr')

@property
def bidiVisual_val(self):
"""
Value of `w:tblPr/w:bidiVisual/@w:val` or |None| if not present.
Controls whether table cells are displayed right-to-left or
left-to-right.
"""
bidiVisual = self.tblPr.bidiVisual
if bidiVisual is None:
return None
return bidiVisual.val

@property
def col_count(self):
"""
Expand Down Expand Up @@ -208,6 +220,7 @@ class CT_TblPr(BaseOxmlElement):
'w:tblDescription', 'w:tblPrChange'
)
tblStyle = ZeroOrOne('w:tblStyle', successors=_tag_seq[1:])
bidiVisual = ZeroOrOne('w:bidiVisual', successors=_tag_seq[4:])
jc = ZeroOrOne('w:jc', successors=_tag_seq[8:])
tblLayout = ZeroOrOne('w:tblLayout', successors=_tag_seq[13:])
del _tag_seq
Expand Down
2 changes: 1 addition & 1 deletion docx/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ def table_direction(self):
the table cells are ordered, e.g. `WD_TABLE_DIRECTION.LTR`. |None|
indicates the value is inherited from the style hierarchy.
"""
raise NotImplementedError
return self._element.bidiVisual_val

@property
def _cells(self):
Expand Down
1 change: 0 additions & 1 deletion features/tbl-props.feature
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ Feature: Get and set table properties
| autofit | fixed | fixed |


@wip
Scenario Outline: Get table direction
Given a table having table direction set <setting>
Then table.table_direction is <value>
Expand Down
17 changes: 16 additions & 1 deletion tests/test_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import pytest

from docx.enum.style import WD_STYLE_TYPE
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.table import WD_TABLE_ALIGNMENT, WD_TABLE_DIRECTION
from docx.oxml import parse_xml
from docx.oxml.table import CT_Tc
from docx.parts.document import DocumentPart
Expand Down Expand Up @@ -91,6 +91,10 @@ def it_knows_it_is_the_table_its_children_belong_to(self, table_fixture):
table = table_fixture
assert table.table is table

def it_knows_its_direction(self, direction_get_fixture):
table, expected_value = direction_get_fixture
assert table.table_direction == expected_value

def it_knows_its_table_style(self, style_get_fixture):
table, style_id_, style_ = style_get_fixture
style = table.style
Expand Down Expand Up @@ -224,6 +228,17 @@ def column_count_fixture(self):
table = Table(element(tbl_cxml), None)
return table, expected_value

@pytest.fixture(params=[
('w:tbl/w:tblPr', None),
('w:tbl/w:tblPr/w:bidiVisual', WD_TABLE_DIRECTION.RTL),
('w:tbl/w:tblPr/w:bidiVisual{w:val=0}', WD_TABLE_DIRECTION.LTR),
('w:tbl/w:tblPr/w:bidiVisual{w:val=on}', WD_TABLE_DIRECTION.RTL),
])
def direction_get_fixture(self, request):
tbl_cxml, expected_value = request.param
table = Table(element(tbl_cxml), None)
return table, expected_value

@pytest.fixture
def row_cells_fixture(self, _cells_, _column_count_):
table = Table(None, None)
Expand Down

0 comments on commit d4ca18d

Please sign in to comment.