Skip to content

Commit 4321d9e

Browse files
author
Steve Canny
committed
parfmt: add ParaFormat.first_line_indent.setter
1 parent 4e5f728 commit 4321d9e

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

docx/oxml/text/paragraph.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,19 @@ def first_line_indent(self):
142142
return None
143143
return firstLine
144144

145+
@first_line_indent.setter
146+
def first_line_indent(self, value):
147+
if self.ind is None and value is None:
148+
return
149+
ind = self.get_or_add_ind()
150+
ind.firstLine = ind.hanging = None
151+
if value is None:
152+
return
153+
elif value < 0:
154+
ind.hanging = -value
155+
else:
156+
ind.firstLine = value
157+
145158
@property
146159
def ind_left(self):
147160
"""

docx/text/paragraph.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,11 @@ def first_line_indent(self):
172172
return None
173173
return pPr.first_line_indent
174174

175+
@first_line_indent.setter
176+
def first_line_indent(self, value):
177+
pPr = self._element.get_or_add_pPr()
178+
pPr.first_line_indent = value
179+
175180
@property
176181
def left_indent(self):
177182
"""

tests/text/test_paragraph.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,11 @@ def it_knows_its_first_line_indent(self, first_indent_get_fixture):
338338
paragraph_format, expected_value = first_indent_get_fixture
339339
assert paragraph_format.first_line_indent == expected_value
340340

341+
def it_can_change_its_first_line_indent(self, first_indent_set_fixture):
342+
paragraph_format, value, expected_xml = first_indent_set_fixture
343+
paragraph_format.first_line_indent = value
344+
assert paragraph_format._element.xml == expected_xml
345+
341346
def it_knows_its_left_indent(self, left_indent_get_fixture):
342347
paragraph_format, expected_value = left_indent_get_fixture
343348
assert paragraph_format.left_indent == expected_value
@@ -388,6 +393,24 @@ def first_indent_get_fixture(self, request):
388393
paragraph_format = ParagraphFormat(element(p_cxml))
389394
return paragraph_format, expected_value
390395

396+
@pytest.fixture(params=[
397+
('w:p', Pt(36), 'w:p/w:pPr/w:ind{w:firstLine=720}'),
398+
('w:p', Pt(-36), 'w:p/w:pPr/w:ind{w:hanging=720}'),
399+
('w:p', 0, 'w:p/w:pPr/w:ind{w:firstLine=0}'),
400+
('w:p', None, 'w:p/w:pPr'),
401+
('w:p/w:pPr/w:ind{w:firstLine=240}', None,
402+
'w:p/w:pPr/w:ind'),
403+
('w:p/w:pPr/w:ind{w:firstLine=240}', Pt(-18),
404+
'w:p/w:pPr/w:ind{w:hanging=360}'),
405+
('w:p/w:pPr/w:ind{w:hanging=240}', Pt(18),
406+
'w:p/w:pPr/w:ind{w:firstLine=360}'),
407+
])
408+
def first_indent_set_fixture(self, request):
409+
p_cxml, value, expected_p_cxml = request.param
410+
paragraph_format = ParagraphFormat(element(p_cxml))
411+
expected_xml = xml(expected_p_cxml)
412+
return paragraph_format, value, expected_xml
413+
391414
@pytest.fixture(params=[
392415
('w:p', None),
393416
('w:p/w:pPr', None),

0 commit comments

Comments
 (0)