python-docx-oss 0.3.0__tar.gz → 0.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (542) hide show
  1. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/HISTORY.md +13 -0
  2. {python_docx_oss-0.3.0/src/python_docx_oss.egg-info → python_docx_oss-0.3.2}/PKG-INFO +6 -1
  3. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/README.md +5 -0
  4. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/conf.py +1 -1
  5. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/compatibility.rst +8 -0
  6. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/__init__.py +1 -1
  7. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/text/hyperlink.py +2 -2
  8. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/text/paragraph.py +2 -2
  9. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/text/run.py +8 -12
  10. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/table.py +1 -1
  11. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/text/hyperlink.py +1 -1
  12. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/text/paragraph.py +1 -1
  13. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/text/run.py +2 -2
  14. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2/src/python_docx_oss.egg-info}/PKG-INFO +6 -1
  15. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/integration/customxml/test_custom_xml_roundtrip.py +23 -0
  16. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/integration/test_word_roundtrip.py +58 -0
  17. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/test_xmlchemy.py +29 -0
  18. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/text/test_hyperlink.py +3 -2
  19. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/text/test_run.py +12 -3
  20. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_sanitize.py +51 -0
  21. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/LICENSE +0 -0
  22. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/MANIFEST.in +0 -0
  23. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/Makefile +0 -0
  24. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_static/.gitignore +0 -0
  25. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_static/img/comment-parts.png +0 -0
  26. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_static/img/example-docx-01.png +0 -0
  27. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_static/img/hdrftr-01.png +0 -0
  28. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_static/img/hdrftr-02.png +0 -0
  29. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_static/img/oss.png +0 -0
  30. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_templates/layout.html +0 -0
  31. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_templates/sidebarlinks.html +0 -0
  32. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_themes/armstrong/LICENSE +0 -0
  33. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_themes/armstrong/layout.html +0 -0
  34. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_themes/armstrong/rtd-themes.conf +0 -0
  35. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_themes/armstrong/static/rtd.css_t +0 -0
  36. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_themes/armstrong/theme.conf +0 -0
  37. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/_themes/armstrong/theme.conf.orig +0 -0
  38. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/comments.rst +0 -0
  39. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/dml.rst +0 -0
  40. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/document.rst +0 -0
  41. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/MsoColorType.rst +0 -0
  42. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/MsoThemeColorIndex.rst +0 -0
  43. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdAlignParagraph.rst +0 -0
  44. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdBuiltinStyle.rst +0 -0
  45. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdCellVerticalAlignment.rst +0 -0
  46. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdColorIndex.rst +0 -0
  47. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdLineSpacing.rst +0 -0
  48. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdOrientation.rst +0 -0
  49. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdRowAlignment.rst +0 -0
  50. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdRowHeightRule.rst +0 -0
  51. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdSectionStart.rst +0 -0
  52. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdStyleType.rst +0 -0
  53. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdTabAlignment.rst +0 -0
  54. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdTabLeader.rst +0 -0
  55. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdTableDirection.rst +0 -0
  56. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/WdUnderline.rst +0 -0
  57. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/enum/index.rst +0 -0
  58. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/sanitize.rst +0 -0
  59. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/section.rst +0 -0
  60. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/settings.rst +0 -0
  61. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/shape.rst +0 -0
  62. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/shared.rst +0 -0
  63. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/style.rst +0 -0
  64. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/table.rst +0 -0
  65. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/api/text.rst +0 -0
  66. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/comments.rst +0 -0
  67. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/coreprops.rst +0 -0
  68. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/header.rst +0 -0
  69. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/numbering.rst +0 -0
  70. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/sections.rst +0 -0
  71. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/settings.rst +0 -0
  72. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/shapes/index.rst +0 -0
  73. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/shapes/picture.rst +0 -0
  74. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/shapes/shapes-inline-size.rst +0 -0
  75. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/shapes/shapes-inline.rst +0 -0
  76. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/styles/character-style.rst +0 -0
  77. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/styles/index.rst +0 -0
  78. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/styles/latent-styles.rst +0 -0
  79. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/styles/paragraph-style.rst +0 -0
  80. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/styles/style.rst +0 -0
  81. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/styles/styles.rst +0 -0
  82. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/table/cell-merge.rst +0 -0
  83. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/table/index.rst +0 -0
  84. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/table/table-cell.rst +0 -0
  85. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/table/table-props.rst +0 -0
  86. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/table/table-row.rst +0 -0
  87. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/breaks.rst +0 -0
  88. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/font-color.rst +0 -0
  89. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/font-highlight-color.rst +0 -0
  90. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/font.rst +0 -0
  91. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/hyperlink.rst +0 -0
  92. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/index.rst +0 -0
  93. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/paragraph-format.rst +0 -0
  94. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/run-content.rst +0 -0
  95. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/tab-stops.rst +0 -0
  96. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/features/text/underline.rst +0 -0
  97. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/index.rst +0 -0
  98. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/schema/ct_body.rst +0 -0
  99. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/schema/ct_document.rst +0 -0
  100. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/analysis/schema/ct_p.rst +0 -0
  101. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/dev/upstream-maintenance.rst +0 -0
  102. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/index.rst +0 -0
  103. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/requirements.txt +0 -0
  104. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/api-concepts.rst +0 -0
  105. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/comments.rst +0 -0
  106. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/custom-properties.rst +0 -0
  107. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/custom-xml.rst +0 -0
  108. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/documents.rst +0 -0
  109. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/hdrftr.rst +0 -0
  110. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/install.rst +0 -0
  111. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/quickstart.rst +0 -0
  112. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/sanitization.rst +0 -0
  113. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/sections.rst +0 -0
  114. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/shapes.rst +0 -0
  115. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/styles-understanding.rst +0 -0
  116. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/styles-using.rst +0 -0
  117. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/tables.rst +0 -0
  118. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/docs/user/text.rst +0 -0
  119. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/api-open-document.feature +0 -0
  120. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/blk-add-paragraph.feature +0 -0
  121. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/blk-add-table.feature +0 -0
  122. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/blk-iter-inner-content.feature +0 -0
  123. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/cmt-mutations.feature +0 -0
  124. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/cmt-props.feature +0 -0
  125. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-access-collections.feature +0 -0
  126. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-access-sections.feature +0 -0
  127. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-add-comment.feature +0 -0
  128. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-add-heading.feature +0 -0
  129. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-add-page-break.feature +0 -0
  130. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-add-paragraph.feature +0 -0
  131. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-add-picture.feature +0 -0
  132. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-add-section.feature +0 -0
  133. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-add-table.feature +0 -0
  134. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-comments.feature +0 -0
  135. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-coreprops.feature +0 -0
  136. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-customprops.feature +0 -0
  137. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-settings.feature +0 -0
  138. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/doc-styles.feature +0 -0
  139. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/environment.py +0 -0
  140. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/hdr-header-footer.feature +0 -0
  141. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/hlk-props.feature +0 -0
  142. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/img-characterize-image.feature +0 -0
  143. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/num-access-numbering-part.feature +0 -0
  144. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/par-access-inner-content.feature +0 -0
  145. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/par-access-parfmt.feature +0 -0
  146. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/par-add-run.feature +0 -0
  147. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/par-alignment-prop.feature +0 -0
  148. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/par-clear-paragraph.feature +0 -0
  149. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/par-insert-paragraph.feature +0 -0
  150. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/par-set-text.feature +0 -0
  151. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/par-style-prop.feature +0 -0
  152. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/pbk-split-para.feature +0 -0
  153. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/run-access-font.feature +0 -0
  154. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/run-access-inner-content.feature +0 -0
  155. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/run-add-content.feature +0 -0
  156. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/run-add-picture.feature +0 -0
  157. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/run-char-style.feature +0 -0
  158. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/run-clear-run.feature +0 -0
  159. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/run-enum-props.feature +0 -0
  160. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sct-section.feature +0 -0
  161. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/shp-inline-shape-access.feature +0 -0
  162. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/shp-inline-shape-size.feature +0 -0
  163. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/api.py +0 -0
  164. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/block.py +0 -0
  165. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/comments.py +0 -0
  166. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/coreprops.py +0 -0
  167. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/customprops.py +0 -0
  168. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/document.py +0 -0
  169. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/font.py +0 -0
  170. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/hdrftr.py +0 -0
  171. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/helpers.py +0 -0
  172. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/hyperlink.py +0 -0
  173. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/image.py +0 -0
  174. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/numbering.py +0 -0
  175. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/pagebreak.py +0 -0
  176. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/paragraph.py +0 -0
  177. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/parfmt.py +0 -0
  178. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/section.py +0 -0
  179. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/settings.py +0 -0
  180. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/shape.py +0 -0
  181. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/shared.py +0 -0
  182. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/styles.py +0 -0
  183. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/table.py +0 -0
  184. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/tabstops.py +0 -0
  185. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/blk-containing-table.docx +0 -0
  186. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/blk-paras-and-tables.docx +0 -0
  187. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/comments-rich-para.docx +0 -0
  188. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/court-exif.jpg +0 -0
  189. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-access-sections.docx +0 -0
  190. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-add-section.docx +0 -0
  191. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-coreprops.docx +0 -0
  192. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-customprops-legacy.docx +0 -0
  193. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-customprops.docx +0 -0
  194. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-default.docx +0 -0
  195. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-no-coreprops.docx +0 -0
  196. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-no-customprops.docx +0 -0
  197. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-odd-even-hdrs.docx +0 -0
  198. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/doc-word-default-blank.docx +0 -0
  199. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/fnt-color.docx +0 -0
  200. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/hdr-header-footer.docx +0 -0
  201. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/jfif-300-dpi.jpg +0 -0
  202. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/jpeg420exif.jpg +0 -0
  203. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/lena.bmp +0 -0
  204. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/lena.gif +0 -0
  205. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/lena.tif +0 -0
  206. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/lena_std.jpg +0 -0
  207. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/monty-truth.png +0 -0
  208. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/mountain.bmp +0 -0
  209. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/num-having-numbering-part.docx +0 -0
  210. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/par-alignment.docx +0 -0
  211. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/par-hlink-frags.docx +0 -0
  212. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/par-hyperlinks.docx +0 -0
  213. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/par-known-paragraphs.docx +0 -0
  214. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/par-known-styles.docx +0 -0
  215. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/par-rendered-page-breaks.docx +0 -0
  216. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/python-icon.jpeg +0 -0
  217. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/run-char-style.docx +0 -0
  218. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/run-enumerated-props.docx +0 -0
  219. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/sample.tif +0 -0
  220. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/sct-first-page-hdrftr.docx +0 -0
  221. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/sct-inner-content.docx +0 -0
  222. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/sct-section-props.docx +0 -0
  223. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/set-no-settings-part.docx +0 -0
  224. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/shp-inline-shape-access.docx +0 -0
  225. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/sty-behav-props.docx +0 -0
  226. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/sty-having-no-styles-part.docx +0 -0
  227. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/sty-having-styles-part.docx +0 -0
  228. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/sty-known-styles.docx +0 -0
  229. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tab-stops.docx +0 -0
  230. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tbl-2x2-table.docx +0 -0
  231. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tbl-cell-access.docx +0 -0
  232. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tbl-cell-props.docx +0 -0
  233. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tbl-col-props.docx +0 -0
  234. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tbl-having-applied-style.docx +0 -0
  235. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tbl-having-tables.docx +0 -0
  236. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tbl-on-off-props.docx +0 -0
  237. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/tbl-props.docx +0 -0
  238. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/test.png +0 -0
  239. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/txt-font-highlight-color.docx +0 -0
  240. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/test_files/txt-font-props.docx +0 -0
  241. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/steps/text.py +0 -0
  242. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sty-access-font.feature +0 -0
  243. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sty-access-latent-styles.feature +0 -0
  244. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sty-access-parfmt.feature +0 -0
  245. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sty-add-style.feature +0 -0
  246. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sty-delete-style.feature +0 -0
  247. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sty-latent-add-del.feature +0 -0
  248. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sty-latent-props.feature +0 -0
  249. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/sty-style-props.feature +0 -0
  250. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tab-access-tabs.feature +0 -0
  251. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tab-tabstop-props.feature +0 -0
  252. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-add-row-or-col.feature +0 -0
  253. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-cell-access.feature +0 -0
  254. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-cell-add-table.feature +0 -0
  255. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-cell-props.feature +0 -0
  256. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-cell-text.feature +0 -0
  257. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-col-props.feature +0 -0
  258. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-item-access.feature +0 -0
  259. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-merge-cells.feature +0 -0
  260. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-props.feature +0 -0
  261. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-row-props.feature +0 -0
  262. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/tbl-style.feature +0 -0
  263. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/txt-add-break.feature +0 -0
  264. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/txt-font-color.feature +0 -0
  265. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/txt-font-props.feature +0 -0
  266. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/features/txt-parfmt-props.feature +0 -0
  267. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/pyproject.toml +0 -0
  268. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/requirements-dev.txt +0 -0
  269. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/requirements-docs.txt +0 -0
  270. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/requirements-test.txt +0 -0
  271. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/requirements.txt +0 -0
  272. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/setup.cfg +0 -0
  273. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/api.py +0 -0
  274. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/blkcntnr.py +0 -0
  275. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/comments.py +0 -0
  276. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/dml/__init__.py +0 -0
  277. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/dml/color.py +0 -0
  278. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/document.py +0 -0
  279. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/drawing/__init__.py +0 -0
  280. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/enum/__init__.py +0 -0
  281. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/enum/base.py +0 -0
  282. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/enum/dml.py +0 -0
  283. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/enum/section.py +0 -0
  284. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/enum/shape.py +0 -0
  285. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/enum/style.py +0 -0
  286. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/enum/table.py +0 -0
  287. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/enum/text.py +0 -0
  288. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/exceptions.py +0 -0
  289. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/__init__.py +0 -0
  290. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/bmp.py +0 -0
  291. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/constants.py +0 -0
  292. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/emf.py +0 -0
  293. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/exceptions.py +0 -0
  294. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/gif.py +0 -0
  295. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/helpers.py +0 -0
  296. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/image.py +0 -0
  297. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/jpeg.py +0 -0
  298. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/png.py +0 -0
  299. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/svg.py +0 -0
  300. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/image/tiff.py +0 -0
  301. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/__init__.py +0 -0
  302. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/constants.py +0 -0
  303. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/coreprops.py +0 -0
  304. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/customprops.py +0 -0
  305. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/exceptions.py +0 -0
  306. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/oxml.py +0 -0
  307. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/package.py +0 -0
  308. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/packuri.py +0 -0
  309. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/part.py +0 -0
  310. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/parts/__init__.py +0 -0
  311. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/parts/coreprops.py +0 -0
  312. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/parts/customprops.py +0 -0
  313. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/phys_pkg.py +0 -0
  314. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/pkgreader.py +0 -0
  315. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/pkgwriter.py +0 -0
  316. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/rel.py +0 -0
  317. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/shared.py +0 -0
  318. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/opc/spec.py +0 -0
  319. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/__init__.py +0 -0
  320. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/comments.py +0 -0
  321. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/coreprops.py +0 -0
  322. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/customprops.py +0 -0
  323. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/dml/CT_ExtensionList.py +0 -0
  324. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/document.py +0 -0
  325. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/drawing.py +0 -0
  326. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/exceptions.py +0 -0
  327. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/ns.py +0 -0
  328. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/numbering.py +0 -0
  329. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/parser.py +0 -0
  330. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/section.py +0 -0
  331. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/settings.py +0 -0
  332. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/shape.py +0 -0
  333. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/shared.py +0 -0
  334. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/simpletypes.py +0 -0
  335. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/styles.py +0 -0
  336. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/table.py +0 -0
  337. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/text/__init__.py +0 -0
  338. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/text/font.py +0 -0
  339. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/text/pagebreak.py +0 -0
  340. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/text/parfmt.py +0 -0
  341. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/oxml/xmlchemy.py +0 -0
  342. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/package.py +0 -0
  343. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/__init__.py +0 -0
  344. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/comments.py +0 -0
  345. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/customxml.py +0 -0
  346. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/document.py +0 -0
  347. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/hdrftr.py +0 -0
  348. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/image.py +0 -0
  349. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/numbering.py +0 -0
  350. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/settings.py +0 -0
  351. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/story.py +0 -0
  352. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/parts/styles.py +0 -0
  353. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/py.typed +0 -0
  354. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/sanitize/__init__.py +0 -0
  355. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/sanitize/cleaner.py +0 -0
  356. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/sanitize/result.py +0 -0
  357. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/section.py +0 -0
  358. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/settings.py +0 -0
  359. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/shape.py +0 -0
  360. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/shared.py +0 -0
  361. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/styles/__init__.py +0 -0
  362. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/styles/latent.py +0 -0
  363. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/styles/style.py +0 -0
  364. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/styles/styles.py +0 -0
  365. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-comments.xml +0 -0
  366. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/[Content_Types].xml +0 -0
  367. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/_rels/.rels +0 -0
  368. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/customXml/_rels/item1.xml.rels +0 -0
  369. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/customXml/item1.xml +0 -0
  370. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/customXml/itemProps1.xml +0 -0
  371. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/docProps/app.xml +0 -0
  372. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/docProps/core.xml +0 -0
  373. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/docProps/thumbnail.jpeg +0 -0
  374. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/_rels/document.xml.rels +0 -0
  375. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/document.xml +0 -0
  376. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/fontTable.xml +0 -0
  377. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/numbering.xml +0 -0
  378. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/settings.xml +0 -0
  379. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/styles.xml +0 -0
  380. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/stylesWithEffects.xml +0 -0
  381. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/theme/theme1.xml +0 -0
  382. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-docx-template/word/webSettings.xml +0 -0
  383. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-footer.xml +0 -0
  384. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-header.xml +0 -0
  385. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-numbering.xml +0 -0
  386. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-settings.xml +0 -0
  387. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default-styles.xml +0 -0
  388. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/templates/default.docx +0 -0
  389. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/text/__init__.py +0 -0
  390. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/text/font.py +0 -0
  391. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/text/pagebreak.py +0 -0
  392. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/text/parfmt.py +0 -0
  393. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/text/tabstops.py +0 -0
  394. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/docx/types.py +0 -0
  395. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/python_docx_oss.egg-info/SOURCES.txt +0 -0
  396. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/python_docx_oss.egg-info/dependency_links.txt +0 -0
  397. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/python_docx_oss.egg-info/requires.txt +0 -0
  398. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/src/python_docx_oss.egg-info/top_level.txt +0 -0
  399. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/__init__.py +0 -0
  400. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/conftest.py +0 -0
  401. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/dml/__init__.py +0 -0
  402. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/dml/test_color.py +0 -0
  403. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/fixtures/README.md +0 -0
  404. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/fixtures/comments/word-comments-rich.docx +0 -0
  405. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/fixtures/customxml/generate_fixture.py +0 -0
  406. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/fixtures/customxml/multiple-custom-xml-parts.docx +0 -0
  407. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/fixtures/documents/word-blank.docx +0 -0
  408. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/fixtures/drawing/word-floating-picture.docx +0 -0
  409. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/fixtures/fonts/word-east-asian-fonts.docx +0 -0
  410. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/fixtures/images/word-svg-image.docx +0 -0
  411. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/__init__.py +0 -0
  412. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_bmp.py +0 -0
  413. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_emf.py +0 -0
  414. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_gif.py +0 -0
  415. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_helpers.py +0 -0
  416. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_image.py +0 -0
  417. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_jpeg.py +0 -0
  418. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_png.py +0 -0
  419. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_svg.py +0 -0
  420. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/image/test_tiff.py +0 -0
  421. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/integration/__init__.py +0 -0
  422. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/integration/customxml/__init__.py +0 -0
  423. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/__init__.py +0 -0
  424. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/parts/__init__.py +0 -0
  425. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/parts/test_coreprops.py +0 -0
  426. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/parts/test_customprops.py +0 -0
  427. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_coreprops.py +0 -0
  428. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_customprops.py +0 -0
  429. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_oxml.py +0 -0
  430. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_package.py +0 -0
  431. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_packuri.py +0 -0
  432. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_part.py +0 -0
  433. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_phys_pkg.py +0 -0
  434. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_pkgreader.py +0 -0
  435. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_pkgwriter.py +0 -0
  436. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/test_rel.py +0 -0
  437. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/unitdata/__init__.py +0 -0
  438. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/unitdata/rels.py +0 -0
  439. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/opc/unitdata/types.py +0 -0
  440. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/__init__.py +0 -0
  441. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/parts/__init__.py +0 -0
  442. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/parts/test_document.py +0 -0
  443. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/parts/unitdata/__init__.py +0 -0
  444. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/parts/unitdata/document.py +0 -0
  445. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/test__init__.py +0 -0
  446. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/test_comments.py +0 -0
  447. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/test_document.py +0 -0
  448. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/test_ns.py +0 -0
  449. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/test_section.py +0 -0
  450. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/test_styles.py +0 -0
  451. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/test_table.py +0 -0
  452. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/text/__init__.py +0 -0
  453. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/unitdata/__init__.py +0 -0
  454. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/unitdata/dml.py +0 -0
  455. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/unitdata/numbering.py +0 -0
  456. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/unitdata/section.py +0 -0
  457. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/unitdata/shared.py +0 -0
  458. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/unitdata/styles.py +0 -0
  459. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/unitdata/table.py +0 -0
  460. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/oxml/unitdata/text.py +0 -0
  461. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/__init__.py +0 -0
  462. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_comments.py +0 -0
  463. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_customxml.py +0 -0
  464. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_document.py +0 -0
  465. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_hdrftr.py +0 -0
  466. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_image.py +0 -0
  467. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_numbering.py +0 -0
  468. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_settings.py +0 -0
  469. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_story.py +0 -0
  470. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/parts/test_styles.py +0 -0
  471. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/styles/__init__.py +0 -0
  472. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/styles/test_latent.py +0 -0
  473. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/styles/test_style.py +0 -0
  474. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/styles/test_styles.py +0 -0
  475. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_api.py +0 -0
  476. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_blkcntnr.py +0 -0
  477. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_comments.py +0 -0
  478. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_document.py +0 -0
  479. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_drawing.py +0 -0
  480. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_enum.py +0 -0
  481. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/150-dpi.png +0 -0
  482. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/300-dpi.TIF +0 -0
  483. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/300-dpi.jpg +0 -0
  484. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/300-dpi.png +0 -0
  485. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/72-dpi.tiff +0 -0
  486. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/CVS_LOGO.WMF +0 -0
  487. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/blk-inner-content.docx +0 -0
  488. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/exif-420-dpi.jpg +0 -0
  489. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/[Content_Types].xml +0 -0
  490. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/_rels/.rels +0 -0
  491. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/customXml/_rels/item1.xml.rels +0 -0
  492. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/customXml/item1.xml +0 -0
  493. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/customXml/itemProps1.xml +0 -0
  494. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/docProps/app.xml +0 -0
  495. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/docProps/core.xml +0 -0
  496. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/docProps/thumbnail.jpeg +0 -0
  497. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/_rels/document.xml.rels +0 -0
  498. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/document.xml +0 -0
  499. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/fontTable.xml +0 -0
  500. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/numbering.xml +0 -0
  501. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/settings.xml +0 -0
  502. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/styles.xml +0 -0
  503. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/stylesWithEffects.xml +0 -0
  504. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/theme/theme1.xml +0 -0
  505. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/expanded_docx/word/webSettings.xml +0 -0
  506. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/having-images.docx +0 -0
  507. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/jfif-iguana.jpg +0 -0
  508. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/jpeg_without_app0_and_app1.jpg +0 -0
  509. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/little-endian.tif +0 -0
  510. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/monty-truth.png +0 -0
  511. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/python-icon.jpeg +0 -0
  512. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/python-icon.png +0 -0
  513. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/python-powered.png +0 -0
  514. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/python.bmp +0 -0
  515. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/sct-inner-content.docx +0 -0
  516. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/snippets/add-row-col.txt +0 -0
  517. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/snippets/inline.txt +0 -0
  518. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/snippets/new-tbl.txt +0 -0
  519. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/snippets/tbl-cells.txt +0 -0
  520. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/sonic.emf +0 -0
  521. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/sonic.gif +0 -0
  522. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_files/test.docx +0 -0
  523. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_package.py +0 -0
  524. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_section.py +0 -0
  525. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_settings.py +0 -0
  526. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_shape.py +0 -0
  527. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_shared.py +0 -0
  528. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/test_table.py +0 -0
  529. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/text/__init__.py +0 -0
  530. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/text/test_font.py +0 -0
  531. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/text/test_hyperlink.py +0 -0
  532. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/text/test_pagebreak.py +0 -0
  533. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/text/test_paragraph.py +0 -0
  534. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/text/test_parfmt.py +0 -0
  535. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/text/test_run.py +0 -0
  536. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/text/test_tabstops.py +0 -0
  537. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/unitdata.py +0 -0
  538. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/unitutil/__init__.py +0 -0
  539. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/unitutil/cxml.py +0 -0
  540. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/unitutil/file.py +0 -0
  541. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tests/unitutil/mock.py +0 -0
  542. {python_docx_oss-0.3.0 → python_docx_oss-0.3.2}/tox.ini +0 -0
@@ -2,6 +2,19 @@
2
2
 
3
3
  **Unreleased**
4
4
 
5
+ **0.3.2 (2026-09-08)**
6
+
7
+ - Restored the 0.0.12 architecture where OXML elements (`CT_R`, `CT_P`, `CT_Hyperlink`)
8
+ do not override lxml's Cython `_Element.text` descriptor, resolving text duplication
9
+ when calling `itertext()` on bare `lxml.etree._Element` parent nodes (such as revision
10
+ tags `w:ins`, `w:del`, and container tags like `w:txbxContent`).
11
+ - Standardized OXML rich-text extraction and assignment on `.texts`, while maintaining full
12
+ compatibility for public proxy APIs (`Paragraph.text`, `Run.text`, `Hyperlink.text`, `_Cell.text`).
13
+ - Documented the intentional upstream difference in the compatibility guide.
14
+
15
+ - Fixed an issue where calling `itertext()` on oxml elements produced duplicated
16
+ text due to overridden `.text` properties.
17
+
5
18
  **0.3.0 (2026-08-29)**
6
19
 
7
20
  - Added opt-in package-level document sanitization for personal metadata,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-docx-oss
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Create, read, and update Microsoft Word .docx files.
5
5
  Author: Ethan St Lee
6
6
  License-Expression: MIT
@@ -155,6 +155,11 @@ available through `Document.add_float_picture()` and `Run.add_float_picture()`.
155
155
 
156
156
  - The project maintains broad compatibility with the public `python-docx` API while
157
157
  following its own versioning and product roadmap.
158
+ - Clean lxml integration: Low-level OXML elements avoid shadowing lxml's Cython
159
+ `_Element.text` descriptor (using `.texts` internally). This guarantees that standard
160
+ `element.itertext()` on parent elements and untyped revision nodes (`w:ins`, `w:del`,
161
+ `w:txbxContent`) never duplicates text, while high-level proxy APIs (`paragraph.text`,
162
+ `run.text`) remain fully compatible with `python-docx`.
158
163
  - Compatibility does not extend to every private or internal `python-docx` API. Test
159
164
  those integrations before migrating production systems.
160
165
  - The SDK focuses exclusively on DOCX. It is not a general XLSX/PPTX Office suite.
@@ -126,6 +126,11 @@ available through `Document.add_float_picture()` and `Run.add_float_picture()`.
126
126
 
127
127
  - The project maintains broad compatibility with the public `python-docx` API while
128
128
  following its own versioning and product roadmap.
129
+ - Clean lxml integration: Low-level OXML elements avoid shadowing lxml's Cython
130
+ `_Element.text` descriptor (using `.texts` internally). This guarantees that standard
131
+ `element.itertext()` on parent elements and untyped revision nodes (`w:ins`, `w:del`,
132
+ `w:txbxContent`) never duplicates text, while high-level proxy APIs (`paragraph.text`,
133
+ `run.text`) remain fully compatible with `python-docx`.
129
134
  - Compatibility does not extend to every private or internal `python-docx` API. Test
130
135
  those integrations before migrating production systems.
131
136
  - The SDK focuses exclusively on DOCX. It is not a general XLSX/PPTX Office suite.
@@ -13,7 +13,7 @@ import sys
13
13
  # add these directories to sys.path here. If the directory is relative to the
14
14
  # documentation root, use os.path.abspath to make it absolute, like shown here.
15
15
  #
16
- sys.path.insert(0, os.path.abspath(".."))
16
+ sys.path.insert(0, os.path.abspath("../src"))
17
17
 
18
18
  from docx import __version__ # noqa
19
19
 
@@ -43,6 +43,14 @@ public inherited API or its observable behavior. Each record must identify:
43
43
  * the ``python-docx-oss`` behavior and rationale; and
44
44
  * any migration action required by callers.
45
45
 
46
+ Preservation of lxml ``_Element.text`` and ``itertext()`` semantics
47
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48
+
49
+ * **Affected API**: Low-level OXML element classes (``CT_P``, ``CT_R``, ``CT_Hyperlink`` in ``docx.oxml``) and observable ``element.itertext()`` / ``element.text`` behavior on XML elements.
50
+ * **Upstream baseline (v1.2.0)**: Upstream defined ``@property def text`` on ``CT_P``, ``CT_R``, and ``CT_Hyperlink`` to return concatenated run/paragraph text. Overriding the Cython descriptor ``_Element.text`` on ``ElementBase`` subclasses causes standard ``lxml`` C-level tree iteration (``itertext()``) to invoke the Python property. As a consequence, calling ``itertext()`` on parent elements or on bare ``lxml.etree._Element`` nodes (such as revision tags ``w:ins``, ``w:del``, or container tags like ``w:txbxContent``) visits both the container node and child ``<w:t>`` nodes, causing text to be duplicated (e.g., ``"Beta"`` becomes ``"BetaBeta"``).
51
+ * **python-docx-oss behavior and rationale**: ``python-docx-oss`` intentionally does not override the ``.text`` property on any ``BaseOxmlElement`` subclass. Rich-text extraction and assignment at the OXML element level is named ``.texts`` (e.g., ``_r.texts``, ``_p.texts``, ``_hyperlink.texts``). Public proxy classes (|Paragraph|, |Run|, |Hyperlink|, and |_Cell|) continue to expose their standard ``.text`` property, delegating internally to ``.texts``. This design preserves standard ``lxml`` descriptor semantics, ensuring that ``itertext()`` produces clean, single-occurrence text across all XML elements.
52
+ * **Migration action**: Callers using public proxy objects (such as ``paragraph.text`` or ``run.text``) require no changes. Callers interacting directly with low-level OXML element instances (e.g., ``run._r``) should use ``.texts`` instead of ``.text`` for rich-text assembly, or standard ``lxml`` methods like ``element.itertext()``.
53
+
46
54
  Additive APIs and capabilities do not require individual divergence records;
47
55
  they belong in the API documentation and Capability Matrix. Upstream baseline
48
56
  changes follow the :doc:`../dev/upstream-maintenance` policy.
@@ -13,7 +13,7 @@ from docx.api import Document
13
13
  if TYPE_CHECKING:
14
14
  from docx.opc.part import Part
15
15
 
16
- __version__ = "0.3.0"
16
+ __version__ = "0.3.2"
17
17
 
18
18
 
19
19
  __all__ = ["Document"]
@@ -37,9 +37,9 @@ class CT_Hyperlink(BaseOxmlElement):
37
37
  return self.xpath("./w:r/w:lastRenderedPageBreak")
38
38
 
39
39
  @property
40
- def text(self) -> str: # pyright: ignore[reportIncompatibleMethodOverride]
40
+ def texts(self) -> str:
41
41
  """The textual content of this hyperlink.
42
42
 
43
43
  `CT_Hyperlink` stores the hyperlink-text as one or more `w:r` children.
44
44
  """
45
- return "".join(r.text for r in self.xpath("w:r"))
45
+ return "".join(r.texts for r in self.xpath("w:r"))
@@ -93,13 +93,13 @@ class CT_P(BaseOxmlElement):
93
93
  pPr.style = style
94
94
 
95
95
  @property
96
- def text(self): # pyright: ignore[reportIncompatibleMethodOverride]
96
+ def texts(self) -> str:
97
97
  """The textual content of this paragraph.
98
98
 
99
99
  Inner-content child elements like `w:r` and `w:hyperlink` are translated to
100
100
  their text equivalent.
101
101
  """
102
- return "".join(e.text for e in self.xpath("w:r | w:hyperlink"))
102
+ return "".join(e.texts for e in self.xpath("w:r | w:hyperlink"))
103
103
 
104
104
  def _insert_pPr(self, pPr: CT_PPr) -> CT_PPr:
105
105
  self.insert(0, pPr)
@@ -127,29 +127,25 @@ class CT_R(BaseOxmlElement):
127
127
  rPr.style = style
128
128
 
129
129
  @property
130
- def text(self) -> str:
130
+ def texts(self) -> str:
131
131
  """The textual content of this run.
132
132
 
133
133
  Inner-content child elements like `w:tab` are translated to their text
134
134
  equivalent.
135
+
136
+ Note: We intentionally do NOT define `@property def text` on CT_R or any
137
+ other oxml element, because doing so overrides lxml's Cython descriptor
138
+ `_Element.text`, which corrupts lxml `itertext()` on parent elements (such
139
+ as bare `_Element` revision tags `w:ins`, `w:del`, etc.).
135
140
  """
136
141
  return "".join(
137
142
  str(e) for e in self.xpath("w:br | w:cr | w:noBreakHyphen | w:ptab | w:t | w:tab")
138
143
  )
139
144
 
140
- @text.setter
141
- def text(self, text: str): # pyright: ignore[reportIncompatibleMethodOverride]
142
- self.clear_content()
143
- _RunContentAppender.append_to_run_from_text(self, text)
144
-
145
- @property
146
- def texts(self) -> str:
147
- """Alias for `text` property for compatibility with python-docx-oss."""
148
- return self.text
149
-
150
145
  @texts.setter
151
146
  def texts(self, text: str):
152
- self.text = text
147
+ self.clear_content()
148
+ _RunContentAppender.append_to_run_from_text(self, text)
153
149
 
154
150
  def _insert_rPr(self, rPr: CT_RPr) -> CT_RPr:
155
151
  self.insert(0, rPr)
@@ -281,7 +281,7 @@ class _Cell(BlockItemContainer):
281
281
  tc.clear_content()
282
282
  p = tc.add_p()
283
283
  r = p.add_r()
284
- r.text = text
284
+ r.texts = text
285
285
 
286
286
  @property
287
287
  def vertical_alignment(self):
@@ -98,7 +98,7 @@ class Hyperlink(Parented):
98
98
  respectively. Note that rendered page-breaks can occur within a hyperlink but
99
99
  they are not reflected in this text.
100
100
  """
101
- return self._hyperlink.text
101
+ return self._hyperlink.texts
102
102
 
103
103
  @property
104
104
  def url(self) -> str:
@@ -160,7 +160,7 @@ class Paragraph(StoryChild):
160
160
  character is mapped to a line break. Paragraph-level formatting, such as style,
161
161
  is preserved. All run-level formatting, such as bold or italic, is removed.
162
162
  """
163
- return self._p.text
163
+ return self._p.texts
164
164
 
165
165
  @text.setter
166
166
  def text(self, text: str | None):
@@ -233,11 +233,11 @@ class Run(StoryChild):
233
233
  `<w:cr/>` element. Any existing run content is replaced. Run formatting is
234
234
  preserved.
235
235
  """
236
- return self._r.text
236
+ return self._r.texts
237
237
 
238
238
  @text.setter
239
239
  def text(self, text: str):
240
- self._r.text = text
240
+ self._r.texts = text
241
241
 
242
242
  @property
243
243
  def underline(self) -> bool | WD_UNDERLINE | None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-docx-oss
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Create, read, and update Microsoft Word .docx files.
5
5
  Author: Ethan St Lee
6
6
  License-Expression: MIT
@@ -155,6 +155,11 @@ available through `Document.add_float_picture()` and `Run.add_float_picture()`.
155
155
 
156
156
  - The project maintains broad compatibility with the public `python-docx` API while
157
157
  following its own versioning and product roadmap.
158
+ - Clean lxml integration: Low-level OXML elements avoid shadowing lxml's Cython
159
+ `_Element.text` descriptor (using `.texts` internally). This guarantees that standard
160
+ `element.itertext()` on parent elements and untyped revision nodes (`w:ins`, `w:del`,
161
+ `w:txbxContent`) never duplicates text, while high-level proxy APIs (`paragraph.text`,
162
+ `run.text`) remain fully compatible with `python-docx`.
158
163
  - Compatibility does not extend to every private or internal `python-docx` API. Test
159
164
  those integrations before migrating production systems.
160
165
  - The SDK focuses exclusively on DOCX. It is not a general XLSX/PPTX Office suite.
@@ -11,6 +11,7 @@ import pytest
11
11
 
12
12
  from docx import Document
13
13
  from docx.document import Document as DocumentType
14
+ from docx.oxml.parser import parse_xml
14
15
  from docx.parts.customxml import CustomXmlPart
15
16
 
16
17
  FIXTURE = (
@@ -83,6 +84,28 @@ class DescribeMultipleCustomXmlParts:
83
84
  assert "customXml/_rels/item1.xml.rels" in names
84
85
  assert "customXml/_rels/item3.xml.rels" in names
85
86
 
87
+ def it_round_trips_replacing_a_custom_xml_part_element(self):
88
+ document = Document(io.BytesIO(FIXTURE.read_bytes()))
89
+ customers = _parts_by_name(document)["/customXml/item1.xml"]
90
+ wrapper = parse_xml('<wrapper xmlns="urn:python-docx-oss:wrapper" version="1"/>')
91
+ wrapper.append(customers.element)
92
+ customers.element = wrapper
93
+
94
+ output = io.BytesIO()
95
+ document.save(output)
96
+ reopened = Document(io.BytesIO(output.getvalue()))
97
+ replaced = _parts_by_name(reopened)["/customXml/item1.xml"]
98
+
99
+ assert replaced.tag == "{urn:python-docx-oss:wrapper}wrapper"
100
+ assert replaced.attrib["version"] == "1" # pyright: ignore[reportUnknownMemberType]
101
+ assert len(replaced.items) == 1
102
+ assert replaced.items[0].tag == f"{{{CUSTOMERS_NS}}}customers"
103
+ assert len(replaced.items[0]) == 2
104
+ with ZipFile(io.BytesIO(output.getvalue())) as package:
105
+ names = set(package.namelist())
106
+ assert "customXml/itemProps1.xml" in names
107
+ assert "customXml/_rels/item1.xml.rels" in names
108
+
86
109
  def it_rejects_an_explicit_partname_collision(self):
87
110
  document = Document(io.BytesIO(FIXTURE.read_bytes()))
88
111
 
@@ -10,6 +10,10 @@ from zipfile import ZipFile
10
10
  from lxml import etree
11
11
 
12
12
  from docx import Document
13
+ from docx.opc.constants import CONTENT_TYPE as CT
14
+ from docx.opc.constants import RELATIONSHIP_TYPE as RT
15
+ from docx.oxml import OxmlElement
16
+ from docx.oxml.ns import qn
13
17
 
14
18
  FIXTURE_DIR = Path(__file__).parent.parent / "fixtures"
15
19
  TEST_FILE_DIR = Path(__file__).parent.parent / "test_files"
@@ -73,6 +77,60 @@ class DescribeWordDocumentRoundTrips:
73
77
  assert "word/styles.xml" in package
74
78
  assert not any(name.startswith("word/media/") for name in package)
75
79
 
80
+ def it_round_trips_a_default_numbering_part_when_the_source_has_none(self):
81
+ fixture = _fixture("documents", "word-blank.docx")
82
+ with ZipFile(fixture) as source_package:
83
+ assert "word/numbering.xml" not in source_package.namelist()
84
+
85
+ document = Document(io.BytesIO(fixture.read_bytes()))
86
+ numbering_part = document.part.numbering_part
87
+ output = document.to_bytes()
88
+ reopened = Document(output)
89
+
90
+ assert str(numbering_part.partname) == "/word/numbering.xml"
91
+ assert str(reopened.part.numbering_part.partname) == "/word/numbering.xml"
92
+ with ZipFile(io.BytesIO(output)) as package_file:
93
+ package = {name: package_file.read(name) for name in package_file.namelist()}
94
+ assert "word/numbering.xml" in package
95
+ assert _content_type(package, "/word/numbering.xml") == CT.WML_NUMBERING
96
+ relationships = _xml(package, "word/_rels/document.xml.rels")
97
+ numbering_relationship = relationships.find(
98
+ f"{{{PR_NS}}}Relationship[@Type='{RT.NUMBERING}']"
99
+ )
100
+ assert numbering_relationship is not None
101
+ assert numbering_relationship.get("Target") == "numbering.xml"
102
+
103
+ def it_round_trips_a_changed_external_hyperlink_target(self):
104
+ document = Document(_fixture("documents", "word-blank.docx").read_bytes())
105
+ paragraph = document.add_paragraph()
106
+ relationship_id = document.part.relate_to(
107
+ "https://example.invalid/objects/old-id",
108
+ RT.HYPERLINK,
109
+ is_external=True,
110
+ )
111
+ hyperlink = OxmlElement("w:hyperlink")
112
+ hyperlink.set(qn("r:id"), relationship_id)
113
+ run = OxmlElement("w:r")
114
+ text = OxmlElement("w:t")
115
+ text.text = "Business link"
116
+ run.append(text)
117
+ hyperlink.append(run)
118
+ paragraph._p.append(hyperlink) # pyright: ignore[reportPrivateUsage]
119
+
120
+ new_target = "https://example.invalid/objects/new-id?position=begin"
121
+ document.part.rels[relationship_id].target_ref = new_target
122
+ output = document.to_bytes()
123
+ reopened = Document(output)
124
+
125
+ assert reopened.paragraphs[-1].hyperlinks[0].text == "Business link"
126
+ assert reopened.paragraphs[-1].hyperlinks[0].address == new_target
127
+ with ZipFile(io.BytesIO(output)) as package_file:
128
+ relationships = etree.fromstring(package_file.read("word/_rels/document.xml.rels"))
129
+ relationship = relationships.find(f"{{{PR_NS}}}Relationship[@Id='{relationship_id}']")
130
+ assert relationship is not None
131
+ assert relationship.get("Target") == new_target
132
+ assert relationship.get("TargetMode") == "External"
133
+
76
134
  def it_creates_independent_document_copies_from_one_snapshot(self):
77
135
  source = Document(_fixture("customxml", "multiple-custom-xml-parts.docx").read_bytes())
78
136
  source.add_paragraph("Shared snapshot")
@@ -1,6 +1,7 @@
1
1
  """Test suite for docx.oxml.xmlchemy."""
2
2
 
3
3
  import pytest
4
+ from lxml import etree
4
5
 
5
6
  from docx.oxml.exceptions import InvalidXmlError
6
7
  from docx.oxml.ns import qn
@@ -48,6 +49,34 @@ class DescribeBaseOxmlElement:
48
49
  element.remove_all(*tagnames)
49
50
  assert element.xml == expected_xml
50
51
 
52
+ def it_iterates_text_without_duplication_on_oxml_elements(self):
53
+ elm = parse_xml(
54
+ '<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">'
55
+ "<w:r><w:t>foo</w:t></w:r>"
56
+ "<w:hyperlink><w:r><w:t>bar</w:t></w:r></w:hyperlink>"
57
+ "</w:p>"
58
+ )
59
+ assert "".join(elm.itertext()) == "foobar"
60
+ assert list(elm.itertext(qn("w:t"))) == ["foo", "bar"]
61
+
62
+ def it_iterates_text_without_duplication_on_unregistered_bare_elements(self):
63
+ # Tags like w:ins, w:del, w:txbxContent are not registered in element_class_lookup
64
+ # and remain bare lxml.etree._Element instances.
65
+ ins = parse_xml(
66
+ '<w:ins xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"'
67
+ ' w:id="1" w:author="t" w:date="2026-01-01T00:00:00Z">'
68
+ "<w:r><w:t>Beta</w:t></w:r>"
69
+ "</w:ins>"
70
+ )
71
+ assert type(ins) is etree._Element
72
+ assert list(ins.itertext()) == ["Beta"]
73
+ assert "".join(ins.itertext()) == "Beta"
74
+
75
+ # Verify CT_R inside it has native None for .text and "Beta" for .texts
76
+ r = ins.findall(qn("w:r"))[0]
77
+ assert r.text is None
78
+ assert r.texts == "Beta"
79
+
51
80
  # fixtures ---------------------------------------------
52
81
 
53
82
  @pytest.fixture(
@@ -41,5 +41,6 @@ class DescribeCT_Hyperlink:
41
41
  rs = hyperlink.r_lst
42
42
 
43
43
  assert [type(r) for r in rs] == [CT_R, CT_R]
44
- assert rs[0].text == "blog"
45
- assert rs[1].text == " post"
44
+ assert rs[0].texts == "blog"
45
+ assert rs[1].texts == " post"
46
+ assert hyperlink.texts == "blog post"
@@ -38,13 +38,22 @@ class DescribeCT_R:
38
38
  cxml = 'w:r/(w:br,w:cr,w:noBreakHyphen,w:ptab,w:t"foobar",w:tab)'
39
39
  r = cast(CT_R, element(cxml))
40
40
 
41
- assert r.text == "\n\n-\tfoobar\t"
41
+ assert r.texts == "\n\n-\tfoobar\t"
42
42
 
43
- def it_provides_texts_alias_for_text(self):
43
+ def it_can_replace_its_text(self):
44
44
  r = cast(CT_R, element('w:r/w:t"alias"'))
45
45
 
46
46
  assert r.texts == "alias"
47
47
 
48
48
  r.texts = "updated"
49
49
 
50
- assert r.text == "updated"
50
+ assert r.texts == "updated"
51
+
52
+ def it_iterates_text_without_duplication(self):
53
+ r = cast(CT_R, element('w:r/(w:br,w:t"foo",w:cr,w:t"bar")'))
54
+
55
+ assert "".join(r.itertext()) == "foobar"
56
+
57
+ def it_does_not_override_element_text_descriptor(self):
58
+ r = cast(CT_R, element('w:r/w:t"foo"'))
59
+ assert r.text is None
@@ -9,6 +9,7 @@ from zipfile import ZipFile
9
9
  from lxml import etree
10
10
 
11
11
  from docx import Document
12
+ from docx.opc.constants import RELATIONSHIP_TYPE as RT
12
13
  from docx.opc.packuri import PackURI
13
14
  from docx.opc.part import Part
14
15
  from docx.oxml import OxmlElement
@@ -145,6 +146,56 @@ def it_removes_the_entire_web_extension_relationship_tree():
145
146
  assert not any(name.startswith("word/webextensions/") for name in archive.namelist())
146
147
 
147
148
 
149
+ def it_round_trips_cleanup_without_removing_application_content():
150
+ document = Document(COMMENTS_FIXTURE)
151
+ custom_xml = document.part.add_custom_xml_part(
152
+ '<application xmlns="urn:python-docx-oss:application" version="1"/>'
153
+ )
154
+ business_relationship_id = document.part.relate_to(
155
+ "https://example.invalid/business/object-id",
156
+ RT.HYPERLINK,
157
+ is_external=True,
158
+ )
159
+ package = document.part.package
160
+ taskpanes = Part(
161
+ PackURI("/word/webextensions/taskpanes.xml"),
162
+ "application/vnd.ms-office.webextensiontaskpanes+xml",
163
+ b"<wetp:taskpanes xmlns:wetp='urn:test'/>",
164
+ package,
165
+ )
166
+ extension = Part(
167
+ PackURI("/word/webextensions/webextension1.xml"),
168
+ "application/vnd.ms-office.webextension+xml",
169
+ b"<we:webextension xmlns:we='urn:test'/>",
170
+ package,
171
+ )
172
+ package.relate_to(
173
+ taskpanes,
174
+ "http://schemas.microsoft.com/office/2011/relationships/webextensiontaskpanes",
175
+ )
176
+ taskpanes.relate_to(
177
+ extension,
178
+ "http://schemas.microsoft.com/office/2011/relationships/webextension",
179
+ )
180
+
181
+ report = document.sanitize(comments=True, web_extensions=True)
182
+ output = document.to_bytes()
183
+ reopened = Document(output)
184
+
185
+ assert report.removed_comment_markers > 0
186
+ assert str(custom_xml.partname) not in report.removed_parts
187
+ assert reopened.part.custom_xml_parts[0].tag == ("{urn:python-docx-oss:application}application")
188
+ assert reopened.part.rels[business_relationship_id].target_ref == (
189
+ "https://example.invalid/business/object-id"
190
+ )
191
+ assert reopened.sanitize(comments=True, web_extensions=True).changed is False
192
+ with ZipFile(io.BytesIO(output)) as archive:
193
+ names = archive.namelist()
194
+ assert "customXml/item1.xml" in names
195
+ assert "word/comments.xml" not in names
196
+ assert not any(name.startswith("word/webextensions/") for name in names)
197
+
198
+
148
199
  def it_removes_formatting_revisions_and_keeps_current_formatting():
149
200
  document = Document()
150
201
  paragraph = document.add_paragraph()
File without changes