Skip to content

Commit f3fa3a9

Browse files
author
Steve Canny
committed
style: add LatentStyles.add_style()
1 parent df9d2ba commit f3fa3a9

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

docx/styles/latent.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ def __iter__(self):
3535
def __len__(self):
3636
return len(self._element.lsdException_lst)
3737

38+
def add_latent_style(self, name):
39+
"""
40+
Return a newly added |_LatentStyle| object to override the inherited
41+
defaults defined in this latent styles object for the built-in style
42+
having *name*.
43+
"""
44+
lsdException = self._element.add_lsdException()
45+
lsdException.name = name
46+
return _LatentStyle(lsdException)
47+
3848
@property
3949
def default_priority(self):
4050
"""

features/sty-latent-add-del.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Feature: Add or delete a latent style
44
I need a way to add and delete a latent style
55

66

7-
@wip
87
Scenario: Add a latent style
98
Given a document having known styles
109
When I add a latent style named 'Foobar'

tests/styles/test_latent.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,15 @@ def priority_set_fixture(self, request):
117117

118118
class DescribeLatentStyles(object):
119119

120+
def it_can_add_a_latent_style(self, add_fixture):
121+
latent_styles, name, expected_xml = add_fixture
122+
123+
latent_style = latent_styles.add_latent_style(name)
124+
125+
assert latent_styles.element.xml == expected_xml
126+
assert isinstance(latent_style, _LatentStyle)
127+
assert latent_style.element is latent_styles.element[0]
128+
120129
def it_knows_how_many_latent_styles_it_contains(self, len_fixture):
121130
latent_styles, expected_value = len_fixture
122131
assert len(latent_styles) == expected_value
@@ -169,6 +178,13 @@ def it_can_change_its_boolean_properties(self, bool_prop_set_fixture):
169178

170179
# fixtures -------------------------------------------------------
171180

181+
@pytest.fixture
182+
def add_fixture(self):
183+
latent_styles = LatentStyles(element('w:latentStyles'))
184+
name = 'Foobar'
185+
expected_xml = xml('w:latentStyles/w:lsdException{w:name=Foobar}')
186+
return latent_styles, name, expected_xml
187+
172188
@pytest.fixture(params=[
173189
('w:latentStyles', 'default_to_hidden', False),
174190
('w:latentStyles', 'default_to_locked', False),

0 commit comments

Comments
 (0)