Skip to content

Commit 42ed65d

Browse files
author
Steve Canny
committed
font: add Font.superscript setter
1 parent 05065bf commit 42ed65d

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

docx/oxml/text/run.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,17 @@ def superscript(self):
267267
return True
268268
return False
269269

270+
@superscript.setter
271+
def superscript(self, value):
272+
if value is None:
273+
self._remove_vertAlign()
274+
elif bool(value) is True:
275+
self.get_or_add_vertAlign().val = ST_VerticalAlignRun.SUPERSCRIPT
276+
elif self.vertAlign is None:
277+
return
278+
elif self.vertAlign.val == ST_VerticalAlignRun.SUPERSCRIPT:
279+
self._remove_vertAlign()
280+
270281
@property
271282
def sz_val(self):
272283
"""

docx/text/run.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,11 @@ def superscript(self):
509509
return None
510510
return rPr.superscript
511511

512+
@superscript.setter
513+
def superscript(self, value):
514+
rPr = self._element.get_or_add_rPr()
515+
rPr.superscript = value
516+
512517
@property
513518
def underline(self):
514519
"""

features/txt-font-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ Feature: Get or set font properties
9191
| superscript | False | True |
9292

9393

94-
@wip
9594
Scenario Outline: Change font sub/superscript
9695
Given a font having <vertAlign-state> vertical alignment
9796
When I assign <value> to font.<name>script

tests/text/test_run.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,11 @@ def it_knows_whether_it_is_superscript(self, superscript_get_fixture):
382382
font, expected_value = superscript_get_fixture
383383
assert font.superscript == expected_value
384384

385+
def it_can_change_whether_it_is_superscript(self, superscript_set_fixture):
386+
font, value, expected_xml = superscript_set_fixture
387+
font.superscript = value
388+
assert font._element.xml == expected_xml
389+
385390
def it_knows_its_underline_type(self, underline_get_fixture):
386391
font, expected_value = underline_get_fixture
387392
assert font.underline is expected_value
@@ -580,6 +585,34 @@ def superscript_get_fixture(self, request):
580585
font = Font(element(r_cxml))
581586
return font, expected_value
582587

588+
@pytest.fixture(params=[
589+
('w:r', True,
590+
'w:r/w:rPr/w:vertAlign{w:val=superscript}'),
591+
('w:r', False,
592+
'w:r/w:rPr'),
593+
('w:r', None,
594+
'w:r/w:rPr'),
595+
('w:r/w:rPr/w:vertAlign{w:val=superscript}', True,
596+
'w:r/w:rPr/w:vertAlign{w:val=superscript}'),
597+
('w:r/w:rPr/w:vertAlign{w:val=superscript}', False,
598+
'w:r/w:rPr'),
599+
('w:r/w:rPr/w:vertAlign{w:val=superscript}', None,
600+
'w:r/w:rPr'),
601+
('w:r/w:rPr/w:vertAlign{w:val=subscript}', True,
602+
'w:r/w:rPr/w:vertAlign{w:val=superscript}'),
603+
('w:r/w:rPr/w:vertAlign{w:val=subscript}', False,
604+
'w:r/w:rPr/w:vertAlign{w:val=subscript}'),
605+
('w:r/w:rPr/w:vertAlign{w:val=subscript}', None,
606+
'w:r/w:rPr'),
607+
('w:r/w:rPr/w:vertAlign{w:val=baseline}', True,
608+
'w:r/w:rPr/w:vertAlign{w:val=superscript}'),
609+
])
610+
def superscript_set_fixture(self, request):
611+
r_cxml, value, expected_r_cxml = request.param
612+
font = Font(element(r_cxml))
613+
expected_xml = xml(expected_r_cxml)
614+
return font, value, expected_xml
615+
583616
@pytest.fixture(params=[
584617
('w:r', None),
585618
('w:r/w:rPr/w:u', None),

0 commit comments

Comments
 (0)