Skip to content

Commit e0a27fa

Browse files
author
Steve Canny
committed
style: add _LatentStyle.name getter
1 parent 75beb5c commit e0a27fa

File tree

5 files changed

+37
-4
lines changed

5 files changed

+37
-4
lines changed

docx/oxml/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,11 @@ def OxmlElement(nsptag_str, attrs=None, nsdecls=None):
113113
register_element_cls('wp:extent', CT_PositiveSize2D)
114114
register_element_cls('wp:inline', CT_Inline)
115115

116-
from .styles import CT_LatentStyles, CT_Style, CT_Styles
116+
from .styles import CT_LatentStyles, CT_LsdException, CT_Style, CT_Styles
117117
register_element_cls('w:basedOn', CT_String)
118118
register_element_cls('w:latentStyles', CT_LatentStyles)
119119
register_element_cls('w:locked', CT_OnOff)
120+
register_element_cls('w:lsdException', CT_LsdException)
120121
register_element_cls('w:name', CT_String)
121122
register_element_cls('w:qFormat', CT_OnOff)
122123
register_element_cls('w:semiHidden', CT_OnOff)

docx/oxml/styles.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from ..enum.style import WD_STYLE_TYPE
88
from .simpletypes import ST_DecimalNumber, ST_OnOff, ST_String
99
from .xmlchemy import (
10-
BaseOxmlElement, OptionalAttribute, ZeroOrMore, ZeroOrOne
10+
BaseOxmlElement, OptionalAttribute, RequiredAttribute, ZeroOrMore,
11+
ZeroOrOne
1112
)
1213

1314

@@ -72,6 +73,14 @@ def set_bool_prop(self, attr_name, value):
7273
setattr(self, attr_name, bool(value))
7374

7475

76+
class CT_LsdException(BaseOxmlElement):
77+
"""
78+
``<w:lsdException>`` element, defining override visibility behaviors for
79+
a named latent style.
80+
"""
81+
name = RequiredAttribute('w:name', ST_String)
82+
83+
7584
class CT_Style(BaseOxmlElement):
7685
"""
7786
A ``<w:style>`` element, representing a style definition

docx/styles/latent.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,10 @@ class _LatentStyle(ElementProxy):
125125
"""
126126

127127
__slots__ = ()
128+
129+
@property
130+
def name(self):
131+
"""
132+
The name of the built-in style this exception applies to.
133+
"""
134+
return self._element.name

features/sty-latent-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ Feature: Get and set latent style properties
3333
| default_to_unhide_when_used | False | False |
3434

3535

36-
@wip
3736
Scenario: Get latent style name
3837
Given a latent style having a known name
3938
Then latent_style.name is the known name

tests/styles/test_latent.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,23 @@
1515
from ..unitutil.cxml import element, xml
1616

1717

18+
class DescribeLatentStyle(object):
19+
20+
def it_knows_its_name(self, name_get_fixture):
21+
latent_style, expected_value = name_get_fixture
22+
assert latent_style.name == expected_value
23+
24+
# fixtures -------------------------------------------------------
25+
26+
@pytest.fixture(params=[
27+
('w:lsdException{w:name=Foobar}', 'Foobar'),
28+
])
29+
def name_get_fixture(self, request):
30+
lsdException_cxml, expected_value = request.param
31+
latent_style = _LatentStyle(element(lsdException_cxml))
32+
return latent_style, expected_value
33+
34+
1835
class DescribeLatentStyles(object):
1936

2037
def it_knows_how_many_latent_styles_it_contains(self, len_fixture):
@@ -67,7 +84,7 @@ def it_can_change_its_boolean_properties(self, bool_prop_set_fixture):
6784
setattr(latent_styles, prop_name, value)
6885
assert latent_styles.element.xml == expected_xml
6986

70-
# fixture --------------------------------------------------------
87+
# fixtures -------------------------------------------------------
7188

7289
@pytest.fixture(params=[
7390
('w:latentStyles', 'default_to_hidden', False),

0 commit comments

Comments
 (0)