Skip to content

Commit 0b612d3

Browse files
author
Steve Canny
committed
style: add BaseStyle.priority getter
1 parent 92a0e52 commit 0b612d3

File tree

5 files changed

+35
-1
lines changed

5 files changed

+35
-1
lines changed

docx/oxml/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ def OxmlElement(nsptag_str, attrs=None, nsdecls=None):
119119
register_element_cls('w:semiHidden', CT_OnOff)
120120
register_element_cls('w:style', CT_Style)
121121
register_element_cls('w:styles', CT_Styles)
122+
register_element_cls('w:uiPriority', CT_DecimalNumber)
122123

123124
from .table import (
124125
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+
uiPriority = ZeroOrOne('w:uiPriority', successors=_tag_seq[8:])
4647
semiHidden = ZeroOrOne('w:semiHidden', successors=_tag_seq[9:])
4748
pPr = ZeroOrOne('w:pPr', successors=_tag_seq[17:])
4849
rPr = ZeroOrOne('w:rPr', successors=_tag_seq[18:])
@@ -125,6 +126,16 @@ def semiHidden_val(self, value):
125126
semiHidden = self._add_semiHidden()
126127
semiHidden.val = value
127128

129+
@property
130+
def uiPriority_val(self):
131+
"""
132+
Value of ``<w:uiPriority>`` child or |None| if not present.
133+
"""
134+
uiPriority = self.uiPriority
135+
if uiPriority is None:
136+
return None
137+
return uiPriority.val
138+
128139

129140
class CT_Styles(BaseOxmlElement):
130141
"""

docx/styles/style.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,16 @@ def name(self):
8787
def name(self, value):
8888
self._element.name_val = value
8989

90+
@property
91+
def priority(self):
92+
"""
93+
The integer sort key governing display sequence of this style in the
94+
Word UI. |None| indicates no setting is defined, causing Word to use
95+
the default value of 0. Style name is used as a secondary sort key to
96+
resolve ordering of styles having the same priority value.
97+
"""
98+
return self._element.uiPriority_val
99+
90100
@property
91101
def style_id(self):
92102
"""

features/sty-style-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ Feature: Get and set style properties
5959
Then style.name is the new name
6060

6161

62-
@wip
6362
Scenario Outline: Get style display sort order
6463
Given a style having priority of <setting>
6564
Then style.priority is <value>

tests/styles/test_style.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@ def it_can_change_whether_its_hidden(self, hidden_set_fixture):
132132
style.hidden = value
133133
assert style._element.xml == expected_xml
134134

135+
def it_knows_its_sort_order(self, priority_get_fixture):
136+
style, expected_value = priority_get_fixture
137+
assert style.priority == expected_value
138+
135139
def it_can_delete_itself_from_the_document(self, delete_fixture):
136140
style, styles, expected_xml = delete_fixture
137141
style.delete()
@@ -224,6 +228,15 @@ def name_set_fixture(self, request):
224228
expected_xml = xml(expected_style_cxml)
225229
return style, new_value, expected_xml
226230

231+
@pytest.fixture(params=[
232+
('w:style', None),
233+
('w:style/w:uiPriority{w:val=42}', 42),
234+
])
235+
def priority_get_fixture(self, request):
236+
style_cxml, expected_value = request.param
237+
style = BaseStyle(element(style_cxml))
238+
return style, expected_value
239+
227240
@pytest.fixture(params=[
228241
('w:style', WD_STYLE_TYPE.PARAGRAPH),
229242
('w:style{w:type=paragraph}', WD_STYLE_TYPE.PARAGRAPH),

0 commit comments

Comments
 (0)