Skip to content

Commit a8237a0

Browse files
author
Steve Canny
committed
font: add Font.size setter
1 parent e85ba54 commit a8237a0

File tree

4 files changed

+30
-1
lines changed

4 files changed

+30
-1
lines changed

docx/oxml/text/run.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,14 @@ def sz_val(self):
251251
return None
252252
return sz.val
253253

254+
@sz_val.setter
255+
def sz_val(self, value):
256+
if value is None:
257+
self._remove_sz()
258+
return
259+
sz = self.get_or_add_sz()
260+
sz.val = value
261+
254262
@property
255263
def underline(self):
256264
"""

docx/text/run.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,11 @@ def size(self):
421421
return None
422422
return rPr.sz_val
423423

424+
@size.setter
425+
def size(self, emu):
426+
rPr = self._element.get_or_add_rPr()
427+
rPr.sz_val = emu
428+
424429

425430
class _Text(object):
426431
"""

features/txt-font-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ Feature: Get or set font properties
3636
| 14 pt | 177800 |
3737

3838

39-
@wip
4039
Scenario Outline: Set font size
4140
Given a font of size <size>
4241
When I assign <value> to font.size

tests/text/test_run.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,11 @@ def it_knows_its_size(self, size_get_fixture):
385385
font, expected_value = size_get_fixture
386386
assert font.size == expected_value
387387

388+
def it_can_change_its_size(self, size_set_fixture):
389+
font, value, expected_xml = size_set_fixture
390+
font.size = value
391+
assert font._element.xml == expected_xml
392+
388393
# fixtures -------------------------------------------------------
389394

390395
@pytest.fixture(params=[
@@ -423,3 +428,15 @@ def size_get_fixture(self, request):
423428
r_cxml, expected_value = request.param
424429
font = Font(element(r_cxml))
425430
return font, expected_value
431+
432+
@pytest.fixture(params=[
433+
('w:r', Pt(12), 'w:r/w:rPr/w:sz{w:val=24}'),
434+
('w:r/w:rPr', Pt(12), 'w:r/w:rPr/w:sz{w:val=24}'),
435+
('w:r/w:rPr/w:sz{w:val=24}', Pt(18), 'w:r/w:rPr/w:sz{w:val=36}'),
436+
('w:r/w:rPr/w:sz{w:val=36}', None, 'w:r/w:rPr'),
437+
])
438+
def size_set_fixture(self, request):
439+
r_cxml, value, expected_r_cxml = request.param
440+
font = Font(element(r_cxml))
441+
expected_xml = xml(expected_r_cxml)
442+
return font, value, expected_xml

0 commit comments

Comments
 (0)