Skip to content

Commit 564d512

Browse files
author
Steve Canny
committed
oxml: convert CT_Body to xmlchemy
1 parent e9e93a6 commit 564d512

2 files changed

Lines changed: 75 additions & 42 deletions

File tree

docs/dev/analysis/schema/ct_body.rst

Lines changed: 62 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,44 @@ Schema excerpt
4545

4646
::
4747

48+
<xsd:complexType name="CT_Body">
49+
<xsd:sequence>
50+
<xsd:choice minOccurs="0" maxOccurs="unbounded">
51+
<xsd:element name="p" type="CT_P"/>
52+
<xsd:element name="tbl" type="CT_Tbl"/>
53+
<xsd:element name="customXml" type="CT_CustomXmlBlock"/>
54+
<xsd:element name="sdt" type="CT_SdtBlock"/>
55+
<xsd:element name="proofErr" type="CT_ProofErr"/>
56+
<xsd:element name="permStart" type="CT_PermStart"/>
57+
<xsd:element name="permEnd" type="CT_Perm"/>
58+
<xsd:element name="ins" type="CT_RunTrackChange"/>
59+
<xsd:element name="del" type="CT_RunTrackChange"/>
60+
<xsd:element name="moveFrom" type="CT_RunTrackChange"/>
61+
<xsd:element name="moveTo" type="CT_RunTrackChange"/>
62+
<xsd:element ref="m:oMathPara" type="CT_OMathPara"/>
63+
<xsd:element ref="m:oMath" type="CT_OMath"/>
64+
<xsd:element name="bookmarkStart" type="CT_Bookmark"/>
65+
<xsd:element name="bookmarkEnd" type="CT_MarkupRange"/>
66+
<xsd:element name="moveFromRangeStart" type="CT_MoveBookmark"/>
67+
<xsd:element name="moveFromRangeEnd" type="CT_MarkupRange"/>
68+
<xsd:element name="moveToRangeStart" type="CT_MoveBookmark"/>
69+
<xsd:element name="moveToRangeEnd" type="CT_MarkupRange"/>
70+
<xsd:element name="commentRangeStart" type="CT_MarkupRange"/>
71+
<xsd:element name="commentRangeEnd" type="CT_MarkupRange"/>
72+
<xsd:element name="customXmlInsRangeStart" type="CT_TrackChange"/>
73+
<xsd:element name="customXmlInsRangeEnd" type="CT_Markup"/>
74+
<xsd:element name="customXmlDelRangeStart" type="CT_TrackChange"/>
75+
<xsd:element name="customXmlDelRangeEnd" type="CT_Markup"/>
76+
<xsd:element name="customXmlMoveFromRangeStart" type="CT_TrackChange"/>
77+
<xsd:element name="customXmlMoveFromRangeEnd" type="CT_Markup"/>
78+
<xsd:element name="customXmlMoveToRangeStart" type="CT_TrackChange"/>
79+
<xsd:element name="customXmlMoveToRangeEnd" type="CT_Markup"/>
80+
<xsd:element name="altChunk" type="CT_AltChunk"/>
81+
</xsd:choice>
82+
<xsd:element name="sectPr" type="CT_SectPr" minOccurs="0" maxOccurs="1"/>
83+
</xsd:sequence>
84+
</xsd:complexType>
85+
4886
<xsd:complexType name="CT_Body">
4987
<xsd:sequence>
5088
<xsd:group ref="EG_BlockLevelElts" minOccurs="0" maxOccurs="unbounded"/>
@@ -63,31 +101,45 @@ Schema excerpt
63101

64102
<xsd:group name="EG_BlockLevelElts">
65103
<xsd:choice>
66-
<xsd:group ref="EG_BlockLevelChunkElts" minOccurs="0" maxOccurs="unbounded"/>
67-
<xsd:element name="altChunk" type="CT_AltChunk" minOccurs="0" maxOccurs="unbounded"/>
104+
<xsd:group ref="EG_BlockLevelChunkElts"/>
105+
<xsd:element name="altChunk" type="CT_AltChunk"/>
68106
</xsd:choice>
69107
</xsd:group>
70108

71109
<xsd:group name="EG_BlockLevelChunkElts">
72110
<xsd:choice>
73-
<xsd:group ref="EG_ContentBlockContent" minOccurs="0" maxOccurs="unbounded"/>
111+
<xsd:group ref="EG_ContentBlockContent"/>
74112
</xsd:choice>
75113
</xsd:group>
76114

77115
<xsd:group name="EG_ContentBlockContent">
78116
<xsd:choice>
79-
<xsd:element name="customXml" type="CT_CustomXmlBlock"/>
80-
<xsd:element name="sdt" type="CT_SdtBlock"/>
81-
<xsd:element name="p" type="CT_P" minOccurs="0" maxOccurs="unbounded"/>
82-
<xsd:element name="tbl" type="CT_Tbl" minOccurs="0" maxOccurs="unbounded"/>
83-
<xsd:group ref="EG_RunLevelElts" minOccurs="0" maxOccurs="unbounded"/>
117+
<xsd:element name="customXml" type="CT_CustomXmlBlock"/>
118+
<xsd:element name="sdt" type="CT_SdtBlock"/>
119+
<xsd:element name="p" type="CT_P"/>
120+
<xsd:element name="tbl" type="CT_Tbl"/>
121+
<xsd:group ref="EG_RunLevelElts"/>
122+
</xsd:choice>
123+
</xsd:group>
124+
125+
<xsd:group name="EG_RunLevelElts">
126+
<xsd:choice>
127+
<xsd:element name="proofErr" type="CT_ProofErr"/>
128+
<xsd:element name="permStart" type="CT_PermStart"/>
129+
<xsd:element name="permEnd" type="CT_Perm"/>
130+
<xsd:element name="ins" type="CT_RunTrackChange"/>
131+
<xsd:element name="del" type="CT_RunTrackChange"/>
132+
<xsd:element name="moveFrom" type="CT_RunTrackChange"/>
133+
<xsd:element name="moveTo" type="CT_RunTrackChange"/>
134+
<xsd:group ref="EG_MathContent"/>
135+
<xsd:group ref="EG_RangeMarkupElements"/>
84136
</xsd:choice>
85137
</xsd:group>
86138

87139
<xsd:group name="EG_MathContent">
88140
<xsd:choice>
89-
<xsd:element ref="m:oMathPara"/>
90-
<xsd:element ref="m:oMath"/>
141+
<xsd:element ref="m:oMathPara" type="CT_OMathPara"/>
142+
<xsd:element ref="m:oMath" type="CT_OMath"/>
91143
</xsd:choice>
92144
</xsd:group>
93145

@@ -111,17 +163,3 @@ Schema excerpt
111163
<xsd:element name="customXmlMoveToRangeEnd" type="CT_Markup"/>
112164
</xsd:choice>
113165
</xsd:group>
114-
115-
<xsd:group name="EG_RunLevelElts">
116-
<xsd:choice>
117-
<xsd:element name="proofErr" type="CT_ProofErr" minOccurs="0"/>
118-
<xsd:element name="permStart" type="CT_PermStart" minOccurs="0"/>
119-
<xsd:element name="permEnd" type="CT_Perm" minOccurs="0"/>
120-
<xsd:element name="ins" type="CT_RunTrackChange" minOccurs="0"/>
121-
<xsd:element name="del" type="CT_RunTrackChange" minOccurs="0"/>
122-
<xsd:element name="moveFrom" type="CT_RunTrackChange"/>
123-
<xsd:element name="moveTo" type="CT_RunTrackChange"/>
124-
<xsd:group ref="EG_MathContent" minOccurs="0" maxOccurs="unbounded"/>
125-
<xsd:group ref="EG_RangeMarkupElements" minOccurs="0" maxOccurs="unbounded"/>
126-
</xsd:choice>
127-
</xsd:group>

docx/oxml/parts/document.py

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
from ..ns import qn
99
from ..table import CT_Tbl
10-
from ..text import CT_P
11-
from ..xmlchemy import BaseOxmlElement, ZeroOrOne
10+
from ..xmlchemy import BaseOxmlElement, ZeroOrOne, ZeroOrMore
1211

1312

1413
class CT_Document(BaseOxmlElement):
@@ -23,22 +22,32 @@ class CT_Body(BaseOxmlElement):
2322
``<w:body>``, the container element for the main document story in
2423
``document.xml``.
2524
"""
25+
p = ZeroOrMore('w:p', successors=('w:sectPr',))
26+
tbl = ZeroOrMore('w:tbl', successors=('w:sectPr',))
27+
2628
def add_p(self):
2729
"""
2830
Return a new <w:p> element that has been added at the end of any
2931
existing body content.
3032
"""
31-
p = CT_P.new()
33+
return self._add_p()
34+
35+
def _insert_p(self, p):
3236
return self._append_blocklevelelt(p)
3337

3438
def add_tbl(self):
3539
"""
3640
Return a new <w:tbl> element that has been added at the end of any
3741
existing body content.
3842
"""
39-
tbl = CT_Tbl.new()
43+
return self._add_tbl()
44+
45+
def _insert_tbl(self, tbl):
4046
return self._append_blocklevelelt(tbl)
4147

48+
def _new_tbl(self):
49+
return CT_Tbl.new()
50+
4251
def clear_content(self):
4352
"""
4453
Remove all content child elements from this <w:body> element. Leave
@@ -51,20 +60,6 @@ def clear_content(self):
5160
for content_elm in content_elms:
5261
self.remove(content_elm)
5362

54-
@property
55-
def p_lst(self):
56-
"""
57-
List of <w:p> child elements.
58-
"""
59-
return self.findall(qn('w:p'))
60-
61-
@property
62-
def tbl_lst(self):
63-
"""
64-
List of <w:tbl> child elements.
65-
"""
66-
return self.findall(qn('w:tbl'))
67-
6863
def _append_blocklevelelt(self, block_level_elt):
6964
"""
7065
Return *block_level_elt* after appending it to end of

0 commit comments

Comments
 (0)