Skip to content

Commit 017bf05

Browse files
author
Steve Canny
committed
oxml: add CT_P.add_r()
1 parent ba9e945 commit 017bf05

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

docx/oxml/text.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ def add_r(self):
2323
"""
2424
Return a newly added CT_R (<w:r>) element.
2525
"""
26+
r = CT_R.new()
27+
self.append(r)
28+
return r
2629

2730
@staticmethod
2831
def new():

tests/oxml/test_text.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ def it_can_construct_a_new_p_element(self):
2121
expected_xml = a_p().with_nsdecls().xml
2222
assert p.xml == expected_xml
2323

24+
def it_can_add_an_r_to_itself(self):
25+
p = a_p().with_nsdecls().element
26+
# exercise -----------------
27+
r = p.add_r()
28+
# verify -------------------
29+
assert p.xml == a_p().with_nsdecls().with_r().xml
30+
assert isinstance(r, CT_R)
31+
2432

2533
class DescribeCT_R(object):
2634

tests/unitdata.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,29 @@ class CT_PBuilder(BaseBuilder):
9292
def __init__(self):
9393
"""Establish instance variables with default values"""
9494
super(CT_PBuilder, self).__init__()
95+
self._r = []
96+
97+
@property
98+
def is_empty(self):
99+
return len(self._r) == 0
100+
101+
def with_r(self, count=1):
102+
"""Add *count* empty run elements"""
103+
for i in range(count):
104+
self._r.append(an_r())
105+
return self
95106

96107
@property
97108
def xml(self):
98109
"""Return element XML based on attribute settings"""
99110
indent = ' ' * self._indent
100-
xml = '%s<w:p%s/>\n' % (indent, self._nsdecls)
111+
if self.is_empty:
112+
xml = '%s<w:p%s/>\n' % (indent, self._nsdecls)
113+
else:
114+
xml = '%s<w:p%s>\n' % (indent, self._nsdecls)
115+
for r in self._r:
116+
xml += r.with_indent(self._indent+2).xml
117+
xml += '%s</w:p>\n' % indent
101118
return xml
102119

103120

0 commit comments

Comments
 (0)