Skip to content

Commit 6186c6a

Browse files
author
Steve Canny
committed
style: add _CharacterStyle.font
1 parent 32efba5 commit 6186c6a

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

docx/styles/style.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from ..enum.style import WD_STYLE_TYPE
1212
from ..shared import ElementProxy
13+
from ..text.run import Font
1314

1415

1516
def StyleFactory(style_elm):
@@ -134,6 +135,14 @@ def base_style(self, style):
134135
style_id = style.style_id if style is not None else None
135136
self._element.basedOn_val = style_id
136137

138+
@property
139+
def font(self):
140+
"""
141+
The |Font| object providing access to the character formatting
142+
properties for this style, such as font name and size.
143+
"""
144+
return Font(self._element)
145+
137146

138147
class _ParagraphStyle(_CharacterStyle):
139148
"""

features/sty-access-font.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Feature: Access style font
44
I need access to the font of a style
55

66

7-
@wip
87
Scenario Outline: Get style font
98
Given a style of type <style-type>
109
Then style.font is the Font object for the style

tests/styles/test_style.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
BaseStyle, _CharacterStyle, _ParagraphStyle, _NumberingStyle,
1616
StyleFactory, _TableStyle
1717
)
18+
from docx.text.run import Font
1819

1920
from ..unitutil.cxml import element, xml
2021
from ..unitutil.mock import call, class_mock, function_mock, instance_mock
@@ -216,6 +217,12 @@ def it_can_change_its_base_style(self, base_set_fixture):
216217
style.base_style = value
217218
assert style._element.xml == expected_xml
218219

220+
def it_provides_access_to_its_font(self, font_fixture):
221+
style, Font_, font_ = font_fixture
222+
font = style.font
223+
Font_.assert_called_once_with(style._element)
224+
assert font is font_
225+
219226
# fixture --------------------------------------------------------
220227

221228
@pytest.fixture(params=[
@@ -255,8 +262,23 @@ def base_set_fixture(self, request, style_):
255262
expected_xml = xml(expected_style_cxml)
256263
return style, base_style, expected_xml
257264

265+
@pytest.fixture
266+
def font_fixture(self, Font_, font_):
267+
style = _CharacterStyle(element('w:style'))
268+
return style, Font_, font_
269+
258270
# fixture components ---------------------------------------------
259271

272+
@pytest.fixture
273+
def Font_(self, request, font_):
274+
return class_mock(
275+
request, 'docx.styles.style.Font', return_value=font_
276+
)
277+
278+
@pytest.fixture
279+
def font_(self, request):
280+
return instance_mock(request, Font)
281+
260282
@pytest.fixture
261283
def style_(self, request):
262284
return instance_mock(request, BaseStyle)

0 commit comments

Comments
 (0)