Skip to content

Commit 0c52c1a

Browse files
author
AI Assistant
committed
feat: native support for tracked changes (w:ins in paragraph.text, w:delText in run.text)
1 parent e454546 commit 0c52c1a

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

src/docx/oxml/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
register_element_cls("w:ptab", CT_PTab)
7777
register_element_cls("w:r", CT_R)
7878
register_element_cls("w:t", CT_Text)
79+
register_element_cls("w:delText", CT_Text)
7980

8081
# ---------------------------------------------------------------------------
8182
# header/footer-related mappings

src/docx/oxml/text/paragraph.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def clear_content(self):
5757
@property
5858
def inner_content_elements(self) -> List[CT_R | CT_Hyperlink]:
5959
"""Run and hyperlink children of the `w:p` element, in document order."""
60-
return self.xpath("./w:r | ./w:hyperlink")
60+
return self.xpath("./w:r | ./w:hyperlink | ./w:ins/w:r")
6161

6262
@property
6363
def lastRenderedPageBreaks(self) -> List[CT_LastRenderedPageBreak]:
@@ -99,7 +99,7 @@ def text(self): # pyright: ignore[reportIncompatibleMethodOverride]
9999
Inner-content child elements like `w:r` and `w:hyperlink` are translated to
100100
their text equivalent.
101101
"""
102-
return "".join(e.text for e in self.xpath("w:r | w:hyperlink"))
102+
return "".join(e.text for e in self.xpath("w:r | w:hyperlink | w:ins/w:r"))
103103

104104
def _insert_pPr(self, pPr: CT_PPr) -> CT_PPr:
105105
self.insert(0, pPr)

src/docx/oxml/text/run.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class CT_R(BaseOxmlElement):
3535
cr = ZeroOrMore("w:cr")
3636
drawing = ZeroOrMore("w:drawing")
3737
t = ZeroOrMore("w:t")
38+
delText = ZeroOrMore("w:delText")
3839
tab = ZeroOrMore("w:tab")
3940

4041
def add_t(self, text: str) -> CT_Text:
@@ -74,7 +75,9 @@ def iter_items() -> Iterator[str | CT_Drawing | CT_LastRenderedPageBreak]:
7475
" | w:lastRenderedPageBreak"
7576
" | w:noBreakHyphen"
7677
" | w:ptab"
78+
" | w:ptab"
7779
" | w:t"
80+
" | w:delText"
7881
" | w:tab"
7982
):
8083
if isinstance(e, (CT_Drawing, CT_LastRenderedPageBreak)):
@@ -134,7 +137,7 @@ def text(self) -> str:
134137
equivalent.
135138
"""
136139
return "".join(
137-
str(e) for e in self.xpath("w:br | w:cr | w:noBreakHyphen | w:ptab | w:t | w:tab")
140+
str(e) for e in self.xpath("w:br | w:cr | w:noBreakHyphen | w:ptab | w:t | w:delText | w:tab")
138141
)
139142

140143
@text.setter

0 commit comments

Comments
 (0)