Skip to content

Commit 270271f

Browse files
author
Steve Canny
committed
font: add Font.name setter
1 parent c4ba0bd commit 270271f

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

docx/oxml/text/run.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class CT_Fonts(BaseOxmlElement):
2626
types.
2727
"""
2828
ascii = OptionalAttribute('w:ascii', ST_String)
29+
hAnsi = OptionalAttribute('w:hAnsi', ST_String)
2930

3031

3132
class CT_R(BaseOxmlElement):
@@ -180,6 +181,31 @@ def rFonts_ascii(self):
180181
return None
181182
return rFonts.ascii
182183

184+
@rFonts_ascii.setter
185+
def rFonts_ascii(self, value):
186+
if value is None:
187+
self._remove_rFonts()
188+
return
189+
rFonts = self.get_or_add_rFonts()
190+
rFonts.ascii = value
191+
192+
@property
193+
def rFonts_hAnsi(self):
194+
"""
195+
The value of `w:rFonts/@w:hAnsi` or |None| if not present.
196+
"""
197+
rFonts = self.rFonts
198+
if rFonts is None:
199+
return None
200+
return rFonts.hAnsi
201+
202+
@rFonts_hAnsi.setter
203+
def rFonts_hAnsi(self, value):
204+
if value is None and self.rFonts is None:
205+
return
206+
rFonts = self.get_or_add_rFonts()
207+
rFonts.hAnsi = value
208+
183209
@property
184210
def style(self):
185211
"""

docx/text/run.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,12 @@ def name(self):
394394
return None
395395
return rPr.rFonts_ascii
396396

397+
@name.setter
398+
def name(self, value):
399+
rPr = self._element.get_or_add_rPr()
400+
rPr.rFonts_ascii = value
401+
rPr.rFonts_hAnsi = value
402+
397403

398404
class _Text(object):
399405
"""

features/txt-font-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ Feature: Get or set font properties
1414
| Avenir Black | Avenir Black |
1515

1616

17-
@wip
1817
Scenario Outline: Set typeface name
1918
Given a font having typeface name <name>
2019
When I assign <value> to font.name

tests/text/test_run.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,12 @@ def it_knows_its_typeface_name(self, name_get_fixture):
374374
font, expected_value = name_get_fixture
375375
assert font.name == expected_value
376376

377+
def it_can_change_its_typeface_name(self, name_set_fixture):
378+
font, value, expected_xml = name_set_fixture
379+
font.name = value
380+
print(font._element.xml)
381+
assert font._element.xml == expected_xml
382+
377383
# fixtures -------------------------------------------------------
378384

379385
@pytest.fixture(params=[
@@ -386,3 +392,19 @@ def name_get_fixture(self, request):
386392
r_cxml, expected_value = request.param
387393
font = Font(element(r_cxml))
388394
return font, expected_value
395+
396+
@pytest.fixture(params=[
397+
('w:r', 'Foo',
398+
'w:r/w:rPr/w:rFonts{w:ascii=Foo,w:hAnsi=Foo}'),
399+
('w:r/w:rPr', 'Foo',
400+
'w:r/w:rPr/w:rFonts{w:ascii=Foo,w:hAnsi=Foo}'),
401+
('w:r/w:rPr/w:rFonts{w:hAnsi=Foo}', 'Bar',
402+
'w:r/w:rPr/w:rFonts{w:ascii=Bar,w:hAnsi=Bar}'),
403+
('w:r/w:rPr/w:rFonts{w:ascii=Foo,w:hAnsi=Foo}', 'Bar',
404+
'w:r/w:rPr/w:rFonts{w:ascii=Bar,w:hAnsi=Bar}'),
405+
])
406+
def name_set_fixture(self, request):
407+
r_cxml, value, expected_r_cxml = request.param
408+
font = Font(element(r_cxml))
409+
expected_xml = xml(expected_r_cxml)
410+
return font, value, expected_xml

0 commit comments

Comments
 (0)