Skip to content

Commit a74b0bf

Browse files
author
Steve Canny
committed
font: add Font.underline setter
1 parent 601216c commit a74b0bf

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

docx/oxml/text/run.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,12 @@ def u_val(self):
269269
return None
270270
return u.val
271271

272+
@u_val.setter
273+
def u_val(self, value):
274+
self._remove_u()
275+
if value is not None:
276+
self._add_u().val = value
277+
272278
@property
273279
def underline(self):
274280
"""

docx/text/run.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,11 @@ def underline(self):
441441
return None
442442
return rPr.u_val
443443

444+
@underline.setter
445+
def underline(self, value):
446+
rPr = self._element.get_or_add_rPr()
447+
rPr.u_val = value
448+
444449

445450
class _Text(object):
446451
"""

features/txt-font-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ Feature: Get or set font properties
6060
| double | WD_UNDERLINE.DOUBLE |
6161

6262

63-
@wip
6463
Scenario Outline: Change font underline
6564
Given a font having <underline-type> underline
6665
When I assign <new-value> to font.underline

tests/text/test_run.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,11 @@ def it_knows_its_underline_type(self, underline_get_fixture):
394394
font, expected_value = underline_get_fixture
395395
assert font.underline is expected_value
396396

397+
def it_can_change_its_underline_type(self, underline_set_fixture):
398+
font, underline, expected_xml = underline_set_fixture
399+
font.underline = underline
400+
assert font._element.xml == expected_xml
401+
397402
# fixtures -------------------------------------------------------
398403

399404
@pytest.fixture(params=[
@@ -457,3 +462,26 @@ def underline_get_fixture(self, request):
457462
r_cxml, expected_value = request.param
458463
run = Font(element(r_cxml), None)
459464
return run, expected_value
465+
466+
@pytest.fixture(params=[
467+
('w:r', True, 'w:r/w:rPr/w:u{w:val=single}'),
468+
('w:r', False, 'w:r/w:rPr/w:u{w:val=none}'),
469+
('w:r', None, 'w:r/w:rPr'),
470+
('w:r', WD_UNDERLINE.SINGLE, 'w:r/w:rPr/w:u{w:val=single}'),
471+
('w:r', WD_UNDERLINE.THICK, 'w:r/w:rPr/w:u{w:val=thick}'),
472+
('w:r/w:rPr/w:u{w:val=single}', True,
473+
'w:r/w:rPr/w:u{w:val=single}'),
474+
('w:r/w:rPr/w:u{w:val=single}', False,
475+
'w:r/w:rPr/w:u{w:val=none}'),
476+
('w:r/w:rPr/w:u{w:val=single}', None,
477+
'w:r/w:rPr'),
478+
('w:r/w:rPr/w:u{w:val=single}', WD_UNDERLINE.SINGLE,
479+
'w:r/w:rPr/w:u{w:val=single}'),
480+
('w:r/w:rPr/w:u{w:val=single}', WD_UNDERLINE.DOTTED,
481+
'w:r/w:rPr/w:u{w:val=dotted}'),
482+
])
483+
def underline_set_fixture(self, request):
484+
initial_r_cxml, value, expected_cxml = request.param
485+
run = Font(element(initial_r_cxml), None)
486+
expected_xml = xml(expected_cxml)
487+
return run, value, expected_xml

0 commit comments

Comments
 (0)