Skip to content

Commit ce4b630

Browse files
author
Steve Canny
committed
oxml: add CT_R.add_t()
1 parent 9ca8f46 commit ce4b630

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed

docx/oxml/text.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ def new():
4949
xml = '<w:r %s/>' % nsdecls('w')
5050
return oxml_fromstring(xml)
5151

52+
def add_t(self, text):
53+
"""
54+
Return a newly added CT_T (<w:t>) element containing *text*.
55+
"""
56+
t = CT_Text.new(text)
57+
self.append(t)
58+
return t
59+
5260

5361
class CT_Text(OxmlBaseElement):
5462
"""

docx/text.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,6 @@ class Text(object):
4848
"""
4949
Proxy object wrapping ``<w:t>`` element.
5050
"""
51+
def __init__(self, t_elm):
52+
super(Text, self).__init__()
53+
self._t = t_elm

tests/oxml/test_text.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ def it_can_construct_a_new_r_element(self):
3636
r = CT_R.new()
3737
assert r.xml == an_r().with_nsdecls().xml
3838

39+
def it_can_add_a_t_to_itself(self):
40+
text = 'foobar'
41+
r = an_r().with_nsdecls().element
42+
# exercise -----------------
43+
t = r.add_t(text)
44+
# verify -------------------
45+
assert r.xml == an_r().with_nsdecls().with_t(text).xml
46+
assert isinstance(t, CT_Text)
47+
3948

4049
class DescribeCT_Text(object):
4150

tests/unitdata.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,29 @@ class CT_RBuilder(BaseBuilder):
126126
def __init__(self):
127127
"""Establish instance variables with default values"""
128128
super(CT_RBuilder, self).__init__()
129+
self._t = []
130+
131+
@property
132+
def is_empty(self):
133+
return len(self._t) == 0
134+
135+
def with_t(self, text):
136+
"""Add an text element containing *text*"""
137+
self._t.append(a_t(text))
138+
return self
129139

130140
@property
131141
def xml(self):
132142
"""Return element XML based on attribute settings"""
133143
indent = ' ' * self._indent
134-
return '%s<w:r%s/>\n' % (indent, self._nsdecls)
144+
if self.is_empty:
145+
xml = '%s<w:r%s/>\n' % (indent, self._nsdecls)
146+
else:
147+
xml = '%s<w:r%s>\n' % (indent, self._nsdecls)
148+
for t_builder in self._t:
149+
xml += t_builder.with_indent(self._indent+2).xml
150+
xml += '%s</w:r>\n' % indent
151+
return xml
135152

136153

137154
class CT_TextBuilder(BaseBuilder):

0 commit comments

Comments
 (0)