Skip to content

Commit 167de84

Browse files
author
Steve Canny
committed
style: add BaseStyle.hidden getter
1 parent 51db6f6 commit 167de84

5 files changed

Lines changed: 41 additions & 5 deletions

File tree

docx/oxml/__init__.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,11 @@ def OxmlElement(nsptag_str, attrs=None, nsdecls=None):
114114
register_element_cls('wp:inline', CT_Inline)
115115

116116
from .styles import CT_Style, CT_Styles
117-
register_element_cls('w:basedOn', CT_String)
118-
register_element_cls('w:name', CT_String)
119-
register_element_cls('w:style', CT_Style)
120-
register_element_cls('w:styles', CT_Styles)
117+
register_element_cls('w:basedOn', CT_String)
118+
register_element_cls('w:name', CT_String)
119+
register_element_cls('w:semiHidden', CT_OnOff)
120+
register_element_cls('w:style', CT_Style)
121+
register_element_cls('w:styles', CT_Styles)
121122

122123
from .table import (
123124
CT_Row, CT_Tbl, CT_TblGrid, CT_TblGridCol, CT_TblLayoutType, CT_TblPr,

docx/oxml/styles.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class CT_Style(BaseOxmlElement):
4343
)
4444
name = ZeroOrOne('w:name', successors=_tag_seq[1:])
4545
basedOn = ZeroOrOne('w:basedOn', successors=_tag_seq[3:])
46+
semiHidden = ZeroOrOne('w:semiHidden', successors=_tag_seq[9:])
4647
pPr = ZeroOrOne('w:pPr', successors=_tag_seq[17:])
4748
rPr = ZeroOrOne('w:rPr', successors=_tag_seq[18:])
4849
del _tag_seq
@@ -107,6 +108,16 @@ def name_val(self, value):
107108
name = self._add_name()
108109
name.val = value
109110

111+
@property
112+
def semiHidden_val(self):
113+
"""
114+
Value of ``<w:semiHidden>`` child or |False| if not present.
115+
"""
116+
semiHidden = self.semiHidden
117+
if semiHidden is None:
118+
return False
119+
return semiHidden.val
120+
110121

111122
class CT_Styles(BaseOxmlElement):
112123
"""

docx/styles/style.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ def delete(self):
5959
self._element.delete()
6060
self._element = None
6161

62+
@property
63+
def hidden(self):
64+
"""
65+
True if display of this style in the style gallery and list of
66+
recommended styles is suppressed. False otherwise. In order to be
67+
shown in the style gallery, this value must be |False| and
68+
:attr:`.quick_style` must be |True|.
69+
"""
70+
return self._element.semiHidden_val
71+
6272
@property
6373
def name(self):
6474
"""

features/sty-style-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ Feature: Get and set style properties
2626
| Base | None | None |
2727

2828

29-
@wip
3029
Scenario Outline: Get hidden value
3130
Given a style having hidden set <setting>
3231
Then style.hidden is <value>

tests/styles/test_style.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ def it_knows_whether_its_a_builtin_style(self, builtin_get_fixture):
123123
style, expected_value = builtin_get_fixture
124124
assert style.builtin is expected_value
125125

126+
def it_knows_whether_its_hidden(self, hidden_get_fixture):
127+
style, expected_value = hidden_get_fixture
128+
assert style.hidden == expected_value
129+
126130
def it_can_delete_itself_from_the_document(self, delete_fixture):
127131
style, styles, expected_xml = delete_fixture
128132
style.delete()
@@ -148,6 +152,17 @@ def delete_fixture(self):
148152
expected_xml = xml('w:styles')
149153
return style, styles, expected_xml
150154

155+
@pytest.fixture(params=[
156+
('w:style', False),
157+
('w:style/w:semiHidden', True),
158+
('w:style/w:semiHidden{w:val=0}', False),
159+
('w:style/w:semiHidden{w:val=1}', True),
160+
])
161+
def hidden_get_fixture(self, request):
162+
style_cxml, expected_value = request.param
163+
style = BaseStyle(element(style_cxml))
164+
return style, expected_value
165+
151166
@pytest.fixture(params=[
152167
('w:style', None),
153168
('w:style{w:styleId=Foobar}', 'Foobar'),

0 commit comments

Comments
 (0)