Skip to content

Commit 05065bf

Browse files
author
Steve Canny
committed
font: add Font.subscript setter
1 parent 7d04ac9 commit 05065bf

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

docx/oxml/text/run.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,17 @@ def subscript(self):
242242
return True
243243
return False
244244

245+
@subscript.setter
246+
def subscript(self, value):
247+
if value is None:
248+
self._remove_vertAlign()
249+
elif bool(value) is True:
250+
self.get_or_add_vertAlign().val = ST_VerticalAlignRun.SUBSCRIPT
251+
elif self.vertAlign is None:
252+
return
253+
elif self.vertAlign.val == ST_VerticalAlignRun.SUBSCRIPT:
254+
self._remove_vertAlign()
255+
245256
@property
246257
def superscript(self):
247258
"""

docx/text/run.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,11 @@ def subscript(self):
492492
return None
493493
return rPr.subscript
494494

495+
@subscript.setter
496+
def subscript(self, value):
497+
rPr = self._element.get_or_add_rPr()
498+
rPr.subscript = value
499+
495500
@property
496501
def superscript(self):
497502
"""

tests/text/test_run.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,11 @@ def it_knows_whether_it_is_subscript(self, subscript_get_fixture):
373373
font, expected_value = subscript_get_fixture
374374
assert font.subscript == expected_value
375375

376+
def it_can_change_whether_it_is_subscript(self, subscript_set_fixture):
377+
font, value, expected_xml = subscript_set_fixture
378+
font.subscript = value
379+
assert font._element.xml == expected_xml
380+
376381
def it_knows_whether_it_is_superscript(self, superscript_get_fixture):
377382
font, expected_value = superscript_get_fixture
378383
assert font.superscript == expected_value
@@ -535,6 +540,34 @@ def subscript_get_fixture(self, request):
535540
font = Font(element(r_cxml))
536541
return font, expected_value
537542

543+
@pytest.fixture(params=[
544+
('w:r', True,
545+
'w:r/w:rPr/w:vertAlign{w:val=subscript}'),
546+
('w:r', False,
547+
'w:r/w:rPr'),
548+
('w:r', None,
549+
'w:r/w:rPr'),
550+
('w:r/w:rPr/w:vertAlign{w:val=subscript}', True,
551+
'w:r/w:rPr/w:vertAlign{w:val=subscript}'),
552+
('w:r/w:rPr/w:vertAlign{w:val=subscript}', False,
553+
'w:r/w:rPr'),
554+
('w:r/w:rPr/w:vertAlign{w:val=subscript}', None,
555+
'w:r/w:rPr'),
556+
('w:r/w:rPr/w:vertAlign{w:val=superscript}', True,
557+
'w:r/w:rPr/w:vertAlign{w:val=subscript}'),
558+
('w:r/w:rPr/w:vertAlign{w:val=superscript}', False,
559+
'w:r/w:rPr/w:vertAlign{w:val=superscript}'),
560+
('w:r/w:rPr/w:vertAlign{w:val=superscript}', None,
561+
'w:r/w:rPr'),
562+
('w:r/w:rPr/w:vertAlign{w:val=baseline}', True,
563+
'w:r/w:rPr/w:vertAlign{w:val=subscript}'),
564+
])
565+
def subscript_set_fixture(self, request):
566+
r_cxml, value, expected_r_cxml = request.param
567+
font = Font(element(r_cxml))
568+
expected_xml = xml(expected_r_cxml)
569+
return font, value, expected_xml
570+
538571
@pytest.fixture(params=[
539572
('w:r', None),
540573
('w:r/w:rPr', None),

0 commit comments

Comments
 (0)