python-docx-oss 0.1.1__tar.gz → 0.3.0__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 (543) hide show
  1. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/HISTORY.md +19 -0
  2. {python_docx_oss-0.1.1/src/python_docx_oss.egg-info → python_docx_oss-0.3.0}/PKG-INFO +18 -14
  3. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/README.md +16 -12
  4. python_docx_oss-0.3.0/docs/_static/img/oss.png +0 -0
  5. python_docx_oss-0.3.0/docs/api/sanitize.rst +60 -0
  6. python_docx_oss-0.3.0/docs/dev/upstream-maintenance.rst +95 -0
  7. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/index.rst +7 -2
  8. python_docx_oss-0.3.0/docs/user/compatibility.rst +48 -0
  9. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/custom-xml.rst +9 -1
  10. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/documents.rst +27 -4
  11. python_docx_oss-0.3.0/docs/user/sanitization.rst +56 -0
  12. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/pyproject.toml +2 -2
  13. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/__init__.py +1 -1
  14. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/api.py +6 -3
  15. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/document.py +34 -0
  16. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/constants.py +1 -0
  17. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/emf.py +1 -2
  18. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/coreprops.py +35 -0
  19. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/part.py +8 -0
  20. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/rel.py +5 -0
  21. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/customxml.py +1 -1
  22. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/document.py +18 -0
  23. python_docx_oss-0.3.0/src/docx/sanitize/__init__.py +10 -0
  24. python_docx_oss-0.3.0/src/docx/sanitize/cleaner.py +221 -0
  25. python_docx_oss-0.3.0/src/docx/sanitize/result.py +38 -0
  26. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0/src/python_docx_oss.egg-info}/PKG-INFO +18 -14
  27. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/python_docx_oss.egg-info/SOURCES.txt +9 -0
  28. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/python_docx_oss.egg-info/requires.txt +1 -1
  29. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/README.md +2 -0
  30. python_docx_oss-0.3.0/tests/fixtures/comments/word-comments-rich.docx +0 -0
  31. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/integration/customxml/test_custom_xml_roundtrip.py +30 -0
  32. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/integration/test_word_roundtrip.py +51 -0
  33. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_coreprops.py +16 -0
  34. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_part.py +11 -0
  35. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_rel.py +9 -0
  36. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_api.py +20 -0
  37. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_document.py +8 -0
  38. python_docx_oss-0.3.0/tests/test_sanitize.py +197 -0
  39. python_docx_oss-0.1.1/docs/_static/img/oss.png +0 -0
  40. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/LICENSE +0 -0
  41. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/MANIFEST.in +0 -0
  42. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/Makefile +0 -0
  43. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/.gitignore +0 -0
  44. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/img/comment-parts.png +0 -0
  45. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/img/example-docx-01.png +0 -0
  46. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/img/hdrftr-01.png +0 -0
  47. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/img/hdrftr-02.png +0 -0
  48. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_templates/layout.html +0 -0
  49. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_templates/sidebarlinks.html +0 -0
  50. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/LICENSE +0 -0
  51. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/layout.html +0 -0
  52. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/rtd-themes.conf +0 -0
  53. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/static/rtd.css_t +0 -0
  54. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/theme.conf +0 -0
  55. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/theme.conf.orig +0 -0
  56. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/comments.rst +0 -0
  57. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/dml.rst +0 -0
  58. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/document.rst +0 -0
  59. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/MsoColorType.rst +0 -0
  60. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/MsoThemeColorIndex.rst +0 -0
  61. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdAlignParagraph.rst +0 -0
  62. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdBuiltinStyle.rst +0 -0
  63. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdCellVerticalAlignment.rst +0 -0
  64. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdColorIndex.rst +0 -0
  65. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdLineSpacing.rst +0 -0
  66. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdOrientation.rst +0 -0
  67. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdRowAlignment.rst +0 -0
  68. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdRowHeightRule.rst +0 -0
  69. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdSectionStart.rst +0 -0
  70. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdStyleType.rst +0 -0
  71. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdTabAlignment.rst +0 -0
  72. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdTabLeader.rst +0 -0
  73. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdTableDirection.rst +0 -0
  74. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdUnderline.rst +0 -0
  75. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/index.rst +0 -0
  76. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/section.rst +0 -0
  77. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/settings.rst +0 -0
  78. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/shape.rst +0 -0
  79. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/shared.rst +0 -0
  80. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/style.rst +0 -0
  81. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/table.rst +0 -0
  82. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/text.rst +0 -0
  83. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/conf.py +0 -0
  84. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/comments.rst +0 -0
  85. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/coreprops.rst +0 -0
  86. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/header.rst +0 -0
  87. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/numbering.rst +0 -0
  88. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/sections.rst +0 -0
  89. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/settings.rst +0 -0
  90. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/shapes/index.rst +0 -0
  91. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/shapes/picture.rst +0 -0
  92. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/shapes/shapes-inline-size.rst +0 -0
  93. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/shapes/shapes-inline.rst +0 -0
  94. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/character-style.rst +0 -0
  95. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/index.rst +0 -0
  96. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/latent-styles.rst +0 -0
  97. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/paragraph-style.rst +0 -0
  98. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/style.rst +0 -0
  99. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/styles.rst +0 -0
  100. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/cell-merge.rst +0 -0
  101. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/index.rst +0 -0
  102. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/table-cell.rst +0 -0
  103. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/table-props.rst +0 -0
  104. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/table-row.rst +0 -0
  105. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/breaks.rst +0 -0
  106. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/font-color.rst +0 -0
  107. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/font-highlight-color.rst +0 -0
  108. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/font.rst +0 -0
  109. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/hyperlink.rst +0 -0
  110. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/index.rst +0 -0
  111. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/paragraph-format.rst +0 -0
  112. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/run-content.rst +0 -0
  113. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/tab-stops.rst +0 -0
  114. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/underline.rst +0 -0
  115. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/index.rst +0 -0
  116. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/schema/ct_body.rst +0 -0
  117. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/schema/ct_document.rst +0 -0
  118. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/schema/ct_p.rst +0 -0
  119. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/requirements.txt +0 -0
  120. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/api-concepts.rst +0 -0
  121. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/comments.rst +0 -0
  122. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/custom-properties.rst +0 -0
  123. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/hdrftr.rst +0 -0
  124. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/install.rst +0 -0
  125. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/quickstart.rst +0 -0
  126. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/sections.rst +0 -0
  127. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/shapes.rst +0 -0
  128. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/styles-understanding.rst +0 -0
  129. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/styles-using.rst +0 -0
  130. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/tables.rst +0 -0
  131. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/text.rst +0 -0
  132. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/api-open-document.feature +0 -0
  133. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/blk-add-paragraph.feature +0 -0
  134. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/blk-add-table.feature +0 -0
  135. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/blk-iter-inner-content.feature +0 -0
  136. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/cmt-mutations.feature +0 -0
  137. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/cmt-props.feature +0 -0
  138. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-access-collections.feature +0 -0
  139. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-access-sections.feature +0 -0
  140. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-comment.feature +0 -0
  141. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-heading.feature +0 -0
  142. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-page-break.feature +0 -0
  143. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-paragraph.feature +0 -0
  144. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-picture.feature +0 -0
  145. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-section.feature +0 -0
  146. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-table.feature +0 -0
  147. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-comments.feature +0 -0
  148. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-coreprops.feature +0 -0
  149. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-customprops.feature +0 -0
  150. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-settings.feature +0 -0
  151. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-styles.feature +0 -0
  152. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/environment.py +0 -0
  153. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/hdr-header-footer.feature +0 -0
  154. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/hlk-props.feature +0 -0
  155. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/img-characterize-image.feature +0 -0
  156. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/num-access-numbering-part.feature +0 -0
  157. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-access-inner-content.feature +0 -0
  158. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-access-parfmt.feature +0 -0
  159. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-add-run.feature +0 -0
  160. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-alignment-prop.feature +0 -0
  161. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-clear-paragraph.feature +0 -0
  162. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-insert-paragraph.feature +0 -0
  163. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-set-text.feature +0 -0
  164. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-style-prop.feature +0 -0
  165. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/pbk-split-para.feature +0 -0
  166. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-access-font.feature +0 -0
  167. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-access-inner-content.feature +0 -0
  168. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-add-content.feature +0 -0
  169. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-add-picture.feature +0 -0
  170. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-char-style.feature +0 -0
  171. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-clear-run.feature +0 -0
  172. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-enum-props.feature +0 -0
  173. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sct-section.feature +0 -0
  174. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/shp-inline-shape-access.feature +0 -0
  175. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/shp-inline-shape-size.feature +0 -0
  176. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/api.py +0 -0
  177. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/block.py +0 -0
  178. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/comments.py +0 -0
  179. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/coreprops.py +0 -0
  180. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/customprops.py +0 -0
  181. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/document.py +0 -0
  182. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/font.py +0 -0
  183. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/hdrftr.py +0 -0
  184. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/helpers.py +0 -0
  185. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/hyperlink.py +0 -0
  186. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/image.py +0 -0
  187. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/numbering.py +0 -0
  188. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/pagebreak.py +0 -0
  189. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/paragraph.py +0 -0
  190. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/parfmt.py +0 -0
  191. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/section.py +0 -0
  192. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/settings.py +0 -0
  193. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/shape.py +0 -0
  194. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/shared.py +0 -0
  195. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/styles.py +0 -0
  196. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/table.py +0 -0
  197. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/tabstops.py +0 -0
  198. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/blk-containing-table.docx +0 -0
  199. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/blk-paras-and-tables.docx +0 -0
  200. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/comments-rich-para.docx +0 -0
  201. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/court-exif.jpg +0 -0
  202. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-access-sections.docx +0 -0
  203. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-add-section.docx +0 -0
  204. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-coreprops.docx +0 -0
  205. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-customprops-legacy.docx +0 -0
  206. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-customprops.docx +0 -0
  207. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-default.docx +0 -0
  208. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-no-coreprops.docx +0 -0
  209. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-no-customprops.docx +0 -0
  210. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-odd-even-hdrs.docx +0 -0
  211. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-word-default-blank.docx +0 -0
  212. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/fnt-color.docx +0 -0
  213. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/hdr-header-footer.docx +0 -0
  214. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/jfif-300-dpi.jpg +0 -0
  215. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/jpeg420exif.jpg +0 -0
  216. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/lena.bmp +0 -0
  217. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/lena.gif +0 -0
  218. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/lena.tif +0 -0
  219. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/lena_std.jpg +0 -0
  220. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/monty-truth.png +0 -0
  221. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/mountain.bmp +0 -0
  222. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/num-having-numbering-part.docx +0 -0
  223. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-alignment.docx +0 -0
  224. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-hlink-frags.docx +0 -0
  225. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-hyperlinks.docx +0 -0
  226. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-known-paragraphs.docx +0 -0
  227. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-known-styles.docx +0 -0
  228. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-rendered-page-breaks.docx +0 -0
  229. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/python-icon.jpeg +0 -0
  230. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/run-char-style.docx +0 -0
  231. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/run-enumerated-props.docx +0 -0
  232. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sample.tif +0 -0
  233. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sct-first-page-hdrftr.docx +0 -0
  234. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sct-inner-content.docx +0 -0
  235. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sct-section-props.docx +0 -0
  236. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/set-no-settings-part.docx +0 -0
  237. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/shp-inline-shape-access.docx +0 -0
  238. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sty-behav-props.docx +0 -0
  239. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sty-having-no-styles-part.docx +0 -0
  240. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sty-having-styles-part.docx +0 -0
  241. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sty-known-styles.docx +0 -0
  242. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tab-stops.docx +0 -0
  243. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-2x2-table.docx +0 -0
  244. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-cell-access.docx +0 -0
  245. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-cell-props.docx +0 -0
  246. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-col-props.docx +0 -0
  247. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-having-applied-style.docx +0 -0
  248. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-having-tables.docx +0 -0
  249. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-on-off-props.docx +0 -0
  250. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-props.docx +0 -0
  251. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/test.png +0 -0
  252. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/txt-font-highlight-color.docx +0 -0
  253. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/txt-font-props.docx +0 -0
  254. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/text.py +0 -0
  255. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-access-font.feature +0 -0
  256. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-access-latent-styles.feature +0 -0
  257. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-access-parfmt.feature +0 -0
  258. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-add-style.feature +0 -0
  259. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-delete-style.feature +0 -0
  260. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-latent-add-del.feature +0 -0
  261. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-latent-props.feature +0 -0
  262. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-style-props.feature +0 -0
  263. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tab-access-tabs.feature +0 -0
  264. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tab-tabstop-props.feature +0 -0
  265. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-add-row-or-col.feature +0 -0
  266. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-cell-access.feature +0 -0
  267. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-cell-add-table.feature +0 -0
  268. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-cell-props.feature +0 -0
  269. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-cell-text.feature +0 -0
  270. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-col-props.feature +0 -0
  271. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-item-access.feature +0 -0
  272. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-merge-cells.feature +0 -0
  273. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-props.feature +0 -0
  274. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-row-props.feature +0 -0
  275. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-style.feature +0 -0
  276. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/txt-add-break.feature +0 -0
  277. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/txt-font-color.feature +0 -0
  278. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/txt-font-props.feature +0 -0
  279. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/txt-parfmt-props.feature +0 -0
  280. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/requirements-dev.txt +0 -0
  281. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/requirements-docs.txt +0 -0
  282. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/requirements-test.txt +0 -0
  283. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/requirements.txt +0 -0
  284. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/setup.cfg +0 -0
  285. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/blkcntnr.py +0 -0
  286. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/comments.py +0 -0
  287. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/dml/__init__.py +0 -0
  288. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/dml/color.py +0 -0
  289. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/drawing/__init__.py +0 -0
  290. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/__init__.py +0 -0
  291. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/base.py +0 -0
  292. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/dml.py +0 -0
  293. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/section.py +0 -0
  294. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/shape.py +0 -0
  295. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/style.py +0 -0
  296. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/table.py +0 -0
  297. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/text.py +0 -0
  298. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/exceptions.py +0 -0
  299. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/__init__.py +0 -0
  300. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/bmp.py +0 -0
  301. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/exceptions.py +0 -0
  302. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/gif.py +0 -0
  303. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/helpers.py +0 -0
  304. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/image.py +0 -0
  305. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/jpeg.py +0 -0
  306. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/png.py +0 -0
  307. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/svg.py +0 -0
  308. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/tiff.py +0 -0
  309. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/__init__.py +0 -0
  310. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/constants.py +0 -0
  311. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/customprops.py +0 -0
  312. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/exceptions.py +0 -0
  313. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/oxml.py +0 -0
  314. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/package.py +0 -0
  315. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/packuri.py +0 -0
  316. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/parts/__init__.py +0 -0
  317. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/parts/coreprops.py +0 -0
  318. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/parts/customprops.py +0 -0
  319. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/phys_pkg.py +0 -0
  320. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/pkgreader.py +0 -0
  321. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/pkgwriter.py +0 -0
  322. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/shared.py +0 -0
  323. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/spec.py +0 -0
  324. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/__init__.py +0 -0
  325. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/comments.py +0 -0
  326. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/coreprops.py +0 -0
  327. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/customprops.py +0 -0
  328. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/dml/CT_ExtensionList.py +0 -0
  329. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/document.py +0 -0
  330. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/drawing.py +0 -0
  331. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/exceptions.py +0 -0
  332. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/ns.py +0 -0
  333. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/numbering.py +0 -0
  334. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/parser.py +0 -0
  335. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/section.py +0 -0
  336. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/settings.py +0 -0
  337. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/shape.py +0 -0
  338. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/shared.py +0 -0
  339. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/simpletypes.py +0 -0
  340. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/styles.py +0 -0
  341. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/table.py +0 -0
  342. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/__init__.py +0 -0
  343. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/font.py +0 -0
  344. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/hyperlink.py +0 -0
  345. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/pagebreak.py +0 -0
  346. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/paragraph.py +0 -0
  347. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/parfmt.py +0 -0
  348. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/run.py +0 -0
  349. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/xmlchemy.py +0 -0
  350. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/package.py +0 -0
  351. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/__init__.py +0 -0
  352. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/comments.py +0 -0
  353. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/hdrftr.py +0 -0
  354. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/image.py +0 -0
  355. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/numbering.py +0 -0
  356. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/settings.py +0 -0
  357. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/story.py +0 -0
  358. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/styles.py +0 -0
  359. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/py.typed +0 -0
  360. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/section.py +0 -0
  361. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/settings.py +0 -0
  362. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/shape.py +0 -0
  363. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/shared.py +0 -0
  364. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/styles/__init__.py +0 -0
  365. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/styles/latent.py +0 -0
  366. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/styles/style.py +0 -0
  367. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/styles/styles.py +0 -0
  368. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/table.py +0 -0
  369. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-comments.xml +0 -0
  370. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/[Content_Types].xml +0 -0
  371. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/_rels/.rels +0 -0
  372. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/customXml/_rels/item1.xml.rels +0 -0
  373. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/customXml/item1.xml +0 -0
  374. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/customXml/itemProps1.xml +0 -0
  375. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/docProps/app.xml +0 -0
  376. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/docProps/core.xml +0 -0
  377. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/docProps/thumbnail.jpeg +0 -0
  378. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/_rels/document.xml.rels +0 -0
  379. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/document.xml +0 -0
  380. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/fontTable.xml +0 -0
  381. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/numbering.xml +0 -0
  382. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/settings.xml +0 -0
  383. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/styles.xml +0 -0
  384. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/stylesWithEffects.xml +0 -0
  385. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/theme/theme1.xml +0 -0
  386. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/webSettings.xml +0 -0
  387. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-footer.xml +0 -0
  388. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-header.xml +0 -0
  389. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-numbering.xml +0 -0
  390. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-settings.xml +0 -0
  391. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-styles.xml +0 -0
  392. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default.docx +0 -0
  393. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/__init__.py +0 -0
  394. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/font.py +0 -0
  395. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/hyperlink.py +0 -0
  396. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/pagebreak.py +0 -0
  397. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/paragraph.py +0 -0
  398. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/parfmt.py +0 -0
  399. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/run.py +0 -0
  400. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/tabstops.py +0 -0
  401. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/types.py +0 -0
  402. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/python_docx_oss.egg-info/dependency_links.txt +0 -0
  403. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/python_docx_oss.egg-info/top_level.txt +0 -0
  404. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/__init__.py +0 -0
  405. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/conftest.py +0 -0
  406. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/dml/__init__.py +0 -0
  407. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/dml/test_color.py +0 -0
  408. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/customxml/generate_fixture.py +0 -0
  409. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/customxml/multiple-custom-xml-parts.docx +0 -0
  410. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/documents/word-blank.docx +0 -0
  411. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/drawing/word-floating-picture.docx +0 -0
  412. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/fonts/word-east-asian-fonts.docx +0 -0
  413. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/images/word-svg-image.docx +0 -0
  414. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/__init__.py +0 -0
  415. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_bmp.py +0 -0
  416. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_emf.py +0 -0
  417. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_gif.py +0 -0
  418. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_helpers.py +0 -0
  419. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_image.py +0 -0
  420. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_jpeg.py +0 -0
  421. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_png.py +0 -0
  422. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_svg.py +0 -0
  423. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_tiff.py +0 -0
  424. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/integration/__init__.py +0 -0
  425. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/integration/customxml/__init__.py +0 -0
  426. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/__init__.py +0 -0
  427. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/parts/__init__.py +0 -0
  428. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/parts/test_coreprops.py +0 -0
  429. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/parts/test_customprops.py +0 -0
  430. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_customprops.py +0 -0
  431. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_oxml.py +0 -0
  432. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_package.py +0 -0
  433. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_packuri.py +0 -0
  434. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_phys_pkg.py +0 -0
  435. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_pkgreader.py +0 -0
  436. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_pkgwriter.py +0 -0
  437. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/unitdata/__init__.py +0 -0
  438. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/unitdata/rels.py +0 -0
  439. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/unitdata/types.py +0 -0
  440. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/__init__.py +0 -0
  441. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/parts/__init__.py +0 -0
  442. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/parts/test_document.py +0 -0
  443. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/parts/unitdata/__init__.py +0 -0
  444. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/parts/unitdata/document.py +0 -0
  445. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test__init__.py +0 -0
  446. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_comments.py +0 -0
  447. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_document.py +0 -0
  448. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_ns.py +0 -0
  449. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_section.py +0 -0
  450. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_styles.py +0 -0
  451. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_table.py +0 -0
  452. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_xmlchemy.py +0 -0
  453. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/text/__init__.py +0 -0
  454. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/text/test_hyperlink.py +0 -0
  455. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/text/test_run.py +0 -0
  456. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/__init__.py +0 -0
  457. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/dml.py +0 -0
  458. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/numbering.py +0 -0
  459. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/section.py +0 -0
  460. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/shared.py +0 -0
  461. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/styles.py +0 -0
  462. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/table.py +0 -0
  463. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/text.py +0 -0
  464. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/__init__.py +0 -0
  465. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_comments.py +0 -0
  466. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_customxml.py +0 -0
  467. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_document.py +0 -0
  468. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_hdrftr.py +0 -0
  469. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_image.py +0 -0
  470. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_numbering.py +0 -0
  471. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_settings.py +0 -0
  472. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_story.py +0 -0
  473. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_styles.py +0 -0
  474. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/styles/__init__.py +0 -0
  475. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/styles/test_latent.py +0 -0
  476. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/styles/test_style.py +0 -0
  477. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/styles/test_styles.py +0 -0
  478. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_blkcntnr.py +0 -0
  479. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_comments.py +0 -0
  480. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_drawing.py +0 -0
  481. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_enum.py +0 -0
  482. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/150-dpi.png +0 -0
  483. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/300-dpi.TIF +0 -0
  484. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/300-dpi.jpg +0 -0
  485. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/300-dpi.png +0 -0
  486. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/72-dpi.tiff +0 -0
  487. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/CVS_LOGO.WMF +0 -0
  488. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/blk-inner-content.docx +0 -0
  489. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/exif-420-dpi.jpg +0 -0
  490. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/[Content_Types].xml +0 -0
  491. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/_rels/.rels +0 -0
  492. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/customXml/_rels/item1.xml.rels +0 -0
  493. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/customXml/item1.xml +0 -0
  494. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/customXml/itemProps1.xml +0 -0
  495. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/docProps/app.xml +0 -0
  496. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/docProps/core.xml +0 -0
  497. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/docProps/thumbnail.jpeg +0 -0
  498. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/_rels/document.xml.rels +0 -0
  499. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/document.xml +0 -0
  500. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/fontTable.xml +0 -0
  501. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/numbering.xml +0 -0
  502. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/settings.xml +0 -0
  503. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/styles.xml +0 -0
  504. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/stylesWithEffects.xml +0 -0
  505. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/theme/theme1.xml +0 -0
  506. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/webSettings.xml +0 -0
  507. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/having-images.docx +0 -0
  508. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/jfif-iguana.jpg +0 -0
  509. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/jpeg_without_app0_and_app1.jpg +0 -0
  510. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/little-endian.tif +0 -0
  511. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/monty-truth.png +0 -0
  512. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/python-icon.jpeg +0 -0
  513. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/python-icon.png +0 -0
  514. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/python-powered.png +0 -0
  515. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/python.bmp +0 -0
  516. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/sct-inner-content.docx +0 -0
  517. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/snippets/add-row-col.txt +0 -0
  518. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/snippets/inline.txt +0 -0
  519. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/snippets/new-tbl.txt +0 -0
  520. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/snippets/tbl-cells.txt +0 -0
  521. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/sonic.emf +0 -0
  522. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/sonic.gif +0 -0
  523. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/test.docx +0 -0
  524. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_package.py +0 -0
  525. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_section.py +0 -0
  526. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_settings.py +0 -0
  527. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_shape.py +0 -0
  528. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_shared.py +0 -0
  529. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_table.py +0 -0
  530. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/__init__.py +0 -0
  531. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_font.py +0 -0
  532. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_hyperlink.py +0 -0
  533. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_pagebreak.py +0 -0
  534. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_paragraph.py +0 -0
  535. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_parfmt.py +0 -0
  536. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_run.py +0 -0
  537. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_tabstops.py +0 -0
  538. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitdata.py +0 -0
  539. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitutil/__init__.py +0 -0
  540. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitutil/cxml.py +0 -0
  541. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitutil/file.py +0 -0
  542. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitutil/mock.py +0 -0
  543. {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tox.ini +0 -0
@@ -1,5 +1,24 @@
1
1
  ## Release History
2
2
 
3
+ **Unreleased**
4
+
5
+ **0.3.0 (2026-08-29)**
6
+
7
+ - Added opt-in package-level document sanitization for personal metadata,
8
+ comments, web extensions, and formatting revision history.
9
+ - Added structured sanitization reports and real Word comment round-trip coverage.
10
+
11
+ **0.2.0 (2026-08-24)**
12
+
13
+ - Added direct loading from raw DOCX bytes with ``Document(bytes)``.
14
+ - Added ``Document.to_bytes()`` for in-memory export and ``Document.copy()``
15
+ for independent document snapshots.
16
+ - Added safe removal of Custom XML parts, including their document and property
17
+ relationships.
18
+ - Added real-document EMF round-trip coverage and corrected the EMF MIME type.
19
+ - Documented the capability matrix, upstream maintenance policy, and
20
+ compatibility boundary with official ``python-docx``.
21
+
3
22
  **0.1.1 (2026-08-21)**
4
23
 
5
24
  - Added Python 3.14 support and CI coverage for Python 3.12 through 3.14.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-docx-oss
3
- Version: 0.1.1
3
+ Version: 0.3.0
4
4
  Summary: Create, read, and update Microsoft Word .docx files.
5
5
  Author: Ethan St Lee
6
6
  License-Expression: MIT
@@ -23,7 +23,7 @@ Classifier: Topic :: Software Development :: Libraries
23
23
  Requires-Python: >=3.12
24
24
  Description-Content-Type: text/markdown
25
25
  License-File: LICENSE
26
- Requires-Dist: lxml>=3.1.0
26
+ Requires-Dist: lxml>=6.1.0
27
27
  Requires-Dist: typing_extensions>=4.9.0
28
28
  Dynamic: license-file
29
29
 
@@ -53,18 +53,20 @@ Use it when an application needs more than basic paragraphs and tables: custom d
53
53
  metadata, application-owned XML, vector images, floating pictures, East Asian fonts,
54
54
  or low-level package and relationship access.
55
55
 
56
- ## Features
57
-
58
- | Capability | Support |
59
- | --- | --- |
60
- | Documents, paragraphs, runs, tables, styles, sections, headers, and footers | ✓ |
61
- | Custom document properties | ✓ |
62
- | Custom XML parts | ✓ |
63
- | SVG and EMF images | ✓ |
64
- | Inline and floating pictures | ✓ |
65
- | Independent ASCII, High ANSI, and East Asian font controls | ✓ |
66
- | Low-level OPC parts and relationships | ✓ |
67
- | File-path and in-memory stream processing | ✓ |
56
+ ## Capability Matrix
57
+
58
+ | Capability | Status | Primary API |
59
+ | --- | --- | --- |
60
+ | Documents, paragraphs, tables, styles, sections, headers, and footers | Stable | `Document()` and document object APIs |
61
+ | Custom document properties | Stable | `document.custom_properties` |
62
+ | Custom XML lifecycle | Stable | `add_custom_xml_part()`, `delete_custom_xml_part()` |
63
+ | SVG and EMF images | Stable | `add_picture()` |
64
+ | Inline and floating pictures | Stable | `add_picture()`, `add_float_picture()` |
65
+ | Latin and East Asian font controls | Stable | `run.font.name`, `run.font.hAnsi`, `run.font.eastAsia` |
66
+ | Low-level OPC parts and relationships | Stable | `document.part.package`, `part.rels` |
67
+ | In-memory read, export, and independent copies | Stable | `Document()`, `to_bytes()`, `copy()` |
68
+ | Document sanitization | Development | `document.sanitize()` |
69
+ | Package inspection and diff | Planned | — |
68
70
 
69
71
  ## Installation
70
72
 
@@ -170,6 +172,8 @@ available through `Document.add_float_picture()` and `Run.add_float_picture()`.
170
172
  - [API reference](docs/index.rst#api-documentation)
171
173
  - [Custom properties](docs/user/custom-properties.rst)
172
174
  - [Custom XML](docs/user/custom-xml.rst)
175
+ - [python-docx compatibility](docs/user/compatibility.rst)
176
+ - [Upstream maintenance](docs/dev/upstream-maintenance.rst)
173
177
  - [Release history](HISTORY.md)
174
178
 
175
179
  ## Quality and Testing
@@ -24,18 +24,20 @@ Use it when an application needs more than basic paragraphs and tables: custom d
24
24
  metadata, application-owned XML, vector images, floating pictures, East Asian fonts,
25
25
  or low-level package and relationship access.
26
26
 
27
- ## Features
28
-
29
- | Capability | Support |
30
- | --- | --- |
31
- | Documents, paragraphs, runs, tables, styles, sections, headers, and footers | ✓ |
32
- | Custom document properties | ✓ |
33
- | Custom XML parts | ✓ |
34
- | SVG and EMF images | ✓ |
35
- | Inline and floating pictures | ✓ |
36
- | Independent ASCII, High ANSI, and East Asian font controls | ✓ |
37
- | Low-level OPC parts and relationships | ✓ |
38
- | File-path and in-memory stream processing | ✓ |
27
+ ## Capability Matrix
28
+
29
+ | Capability | Status | Primary API |
30
+ | --- | --- | --- |
31
+ | Documents, paragraphs, tables, styles, sections, headers, and footers | Stable | `Document()` and document object APIs |
32
+ | Custom document properties | Stable | `document.custom_properties` |
33
+ | Custom XML lifecycle | Stable | `add_custom_xml_part()`, `delete_custom_xml_part()` |
34
+ | SVG and EMF images | Stable | `add_picture()` |
35
+ | Inline and floating pictures | Stable | `add_picture()`, `add_float_picture()` |
36
+ | Latin and East Asian font controls | Stable | `run.font.name`, `run.font.hAnsi`, `run.font.eastAsia` |
37
+ | Low-level OPC parts and relationships | Stable | `document.part.package`, `part.rels` |
38
+ | In-memory read, export, and independent copies | Stable | `Document()`, `to_bytes()`, `copy()` |
39
+ | Document sanitization | Development | `document.sanitize()` |
40
+ | Package inspection and diff | Planned | — |
39
41
 
40
42
  ## Installation
41
43
 
@@ -141,6 +143,8 @@ available through `Document.add_float_picture()` and `Run.add_float_picture()`.
141
143
  - [API reference](docs/index.rst#api-documentation)
142
144
  - [Custom properties](docs/user/custom-properties.rst)
143
145
  - [Custom XML](docs/user/custom-xml.rst)
146
+ - [python-docx compatibility](docs/user/compatibility.rst)
147
+ - [Upstream maintenance](docs/dev/upstream-maintenance.rst)
144
148
  - [Release history](HISTORY.md)
145
149
 
146
150
  ## Quality and Testing
@@ -0,0 +1,60 @@
1
+ .. _sanitize_api:
2
+
3
+ Sanitization objects
4
+ ====================
5
+
6
+ .. currentmodule:: docx.sanitize
7
+
8
+
9
+ SanitizationReport objects
10
+ --------------------------
11
+
12
+ .. autoclass:: SanitizationReport
13
+ :members: changed
14
+
15
+ .. attribute:: scrubbed_properties
16
+
17
+ Names of core properties normalized during sanitization.
18
+
19
+ .. attribute:: removed_comment_markers
20
+
21
+ Number of outermost comment marker elements removed from Word story XML.
22
+
23
+ .. attribute:: removed_formatting_revisions
24
+
25
+ Number of outermost formatting revision elements removed.
26
+
27
+ .. attribute:: removed_parts
28
+
29
+ Package part names made unreachable by removed relationships.
30
+
31
+ .. attribute:: removed_relationships
32
+
33
+ :class:`RemovedRelationship` records for relationships removed from the
34
+ package graph.
35
+
36
+ .. attribute:: warnings
37
+
38
+ Non-fatal conditions encountered while sanitizing the package.
39
+
40
+
41
+ RemovedRelationship objects
42
+ ---------------------------
43
+
44
+ .. autoclass:: RemovedRelationship
45
+
46
+ .. attribute:: source
47
+
48
+ Part name of the relationship source, or ``/`` for the package itself.
49
+
50
+ .. attribute:: relationship_id
51
+
52
+ Relationship identifier used by the source.
53
+
54
+ .. attribute:: relationship_type
55
+
56
+ Full relationship type URI.
57
+
58
+ .. attribute:: target
59
+
60
+ Target part name or external target reference.
@@ -0,0 +1,95 @@
1
+ Upstream maintenance
2
+ ====================
3
+
4
+ ``python-docx-oss`` evolves as an independent DOCX SDK. Its source, tests,
5
+ versioning, and releases are authoritative in this repository. The official
6
+ `python-docx repository <https://github.com/python-openxml/python-docx>`_ is an
7
+ upstream source of compatible APIs, bug fixes, and OPC/WordprocessingML
8
+ improvements; it is not the development repository for ``python-docx-oss``.
9
+
10
+ Upstream baseline
11
+ -----------------
12
+
13
+ The current upstream baseline is ``python-docx v1.2.0`` at commit
14
+ ``e45454602b53e8e572b179ccf1c91093ec9f4ed7``.
15
+
16
+ This baseline identifies the last official release whose changes have been
17
+ evaluated as a whole. It does not imply compatibility with every private or
18
+ internal upstream API.
19
+
20
+ No local repository layout is required. A maintainer may obtain upstream source
21
+ using a temporary clone, a read-only Git remote, a release archive, or another
22
+ equivalent method. Maintenance instructions and project documentation must not
23
+ depend on sibling directories, personal filesystem paths, or local-only
24
+ branches.
25
+
26
+ When to evaluate upstream
27
+ -------------------------
28
+
29
+ Evaluate upstream changes when:
30
+
31
+ * ``python-docx`` publishes a release;
32
+ * upstream fixes a security, data-loss, or document-compatibility issue;
33
+ * a supported downstream workflow needs a new standard API; or
34
+ * an upcoming ``python-docx-oss`` release needs a baseline refresh.
35
+
36
+ Continuous synchronization with individual upstream commits is not required.
37
+
38
+ Integration workflow
39
+ --------------------
40
+
41
+ #. Obtain the target upstream tag or commit and compare it with the recorded
42
+ baseline.
43
+ #. Review release notes and classify changes to public APIs, OPC packaging,
44
+ XML handling, templates, schemas, tests, and documentation.
45
+ #. Create a dedicated branch in ``python-docx-oss`` for the integration. The
46
+ branch name and the location used to obtain upstream source are not part of
47
+ the public maintenance contract.
48
+ #. Integrate the relevant changes as a reviewable change set. Preserve upstream
49
+ history when practical, but prefer a clear, auditable result over a blind
50
+ merge.
51
+ #. Resolve conflicts according to the compatibility rules below.
52
+ #. Run the full verification gates and review the package artifacts.
53
+ #. Update this baseline, compatibility notes, and ``HISTORY.md`` in the same
54
+ integration change.
55
+
56
+ Compatibility and conflict rules
57
+ --------------------------------
58
+
59
+ Standard public ``python-docx`` behavior is preferred unless adopting it would
60
+ break an API intentionally supported by ``python-docx-oss``. An upstream
61
+ integration must preserve the supported capabilities documented in the
62
+ Capability Matrix and covered by the regression test suite.
63
+
64
+ Compatibility with upstream private APIs is not guaranteed. Intentional public
65
+ API differences must be recorded in compatibility or divergence notes rather
66
+ than hidden in conflict-resolution commits.
67
+
68
+ Verification gates
69
+ ------------------
70
+
71
+ An upstream integration is complete only when the repository CI passes. This
72
+ includes:
73
+
74
+ * unit, integration, and acceptance tests on all supported Python versions;
75
+ * lint, formatting, and scoped type checks;
76
+ * documentation and distribution builds; and
77
+ * real-DOCX round trips required by the Capability Matrix and regression test
78
+ suite.
79
+
80
+ The resulting wheel and source distribution must contain the expected package
81
+ data and install without also installing the official ``python-docx``
82
+ distribution, because both projects provide the ``docx`` import namespace.
83
+
84
+ Recording the result
85
+ --------------------
86
+
87
+ For each completed baseline refresh, record:
88
+
89
+ * the upstream tag and resolved commit;
90
+ * the material APIs and fixes adopted;
91
+ * intentionally omitted upstream changes and their rationale; and
92
+ * any new compatibility boundary visible to users.
93
+
94
+ Temporary comparison checkouts, remotes, and branches are local implementation
95
+ details and are not part of the permanent project record.
@@ -22,7 +22,9 @@ supports capabilities needed by more demanding document workflows:
22
22
  * SVG and EMF vector images;
23
23
  * separate Latin and East Asian font settings;
24
24
  * document custom properties; and
25
- * multiple Custom XML parts that survive a load/save round trip.
25
+ * multiple Custom XML parts that survive a load/save round trip; and
26
+ * explicit package-level sanitization of metadata, comments, web extensions,
27
+ and formatting revision history.
26
28
 
27
29
  Here is a small example:
28
30
 
@@ -94,9 +96,11 @@ User Guide
94
96
  user/styles-understanding
95
97
  user/styles-using
96
98
  user/comments
99
+ user/sanitization
97
100
  user/shapes
98
101
  user/custom-properties
99
102
  user/custom-xml
103
+ user/compatibility
100
104
 
101
105
 
102
106
  API Documentation
@@ -112,16 +116,17 @@ API Documentation
112
116
  api/table
113
117
  api/section
114
118
  api/comments
119
+ api/sanitize
115
120
  api/shape
116
121
  api/dml
117
122
  api/shared
118
123
  api/enum/index
119
124
 
120
-
121
125
  Contributor Guide
122
126
  -----------------
123
127
 
124
128
  .. toctree::
125
129
  :maxdepth: 1
126
130
 
131
+ dev/upstream-maintenance
127
132
  dev/analysis/index
@@ -0,0 +1,48 @@
1
+ python-docx compatibility
2
+ =========================
3
+
4
+ ``python-docx-oss`` and the official ``python-docx`` project share the
5
+ ``docx`` import namespace and a common code lineage. They are separate Python
6
+ distributions with independent versions and release schedules.
7
+
8
+ Compatibility target
9
+ --------------------
10
+
11
+ The current upstream baseline is ``python-docx v1.2.0`` at commit
12
+ ``e45454602b53e8e572b179ccf1c91093ec9f4ed7``.
13
+
14
+ Public APIs inherited from that baseline are compatibility targets unless an
15
+ intentional difference is documented. Compatibility with private modules,
16
+ private attributes, undocumented XML internals, or implementation details is
17
+ not guaranteed.
18
+
19
+ Extensions provided by ``python-docx-oss`` are additive where practical. The
20
+ project's current supported and planned features are maintained in the
21
+ Capability Matrix rather than duplicated here.
22
+
23
+ Distribution boundary
24
+ ---------------------
25
+
26
+ Do not install ``python-docx`` and ``python-docx-oss`` into the same Python
27
+ environment. Both distributions provide the ``docx`` package, so installing
28
+ both can produce an environment whose imported files depend on installation
29
+ order.
30
+
31
+ Applications should declare exactly one of the two distributions as a direct
32
+ dependency. Migrating an existing application normally does not require import
33
+ changes, but its use of undocumented upstream internals must be reviewed.
34
+
35
+ Intentional differences
36
+ -----------------------
37
+
38
+ An intentional difference is recorded when ``python-docx-oss`` changes a
39
+ public inherited API or its observable behavior. Each record must identify:
40
+
41
+ * the affected public API;
42
+ * the behavior of the recorded upstream baseline;
43
+ * the ``python-docx-oss`` behavior and rationale; and
44
+ * any migration action required by callers.
45
+
46
+ Additive APIs and capabilities do not require individual divergence records;
47
+ they belong in the API documentation and Capability Matrix. Upstream baseline
48
+ changes follow the :doc:`../dev/upstream-maintenance` policy.
@@ -89,7 +89,15 @@ Delete a child by passing the element itself::
89
89
  customers.delete_item(customer)
90
90
 
91
91
  The indexes in ``items`` can change after deletion. Removing an entire Custom
92
- XML part is not currently provided by this API.
92
+ XML part uses the main document part::
93
+
94
+ document.part.delete_custom_xml_part(customers)
95
+
96
+ The Custom XML part, its relationship from the main document, and any related
97
+ ``itemPropsN.xml`` property part are omitted the next time the document is
98
+ saved. The deleted ``itemN.xml`` name becomes available for later additions.
99
+ Attempting to delete a part that is not related to the document, including a
100
+ part that has already been deleted, raises ``ValueError``.
93
101
 
94
102
  Existing relationships to Custom XML property parts, such as
95
103
  ``itemPropsN.xml``, are preserved during load/save round trips.
@@ -67,13 +67,18 @@ Opening a file-like document
67
67
  |docx| can open a document from a so-called *file-like* object. It can also
68
68
  save to a file-like object. This can be handy when you want to get the source
69
69
  or target document over a network connection or from a database and don't want
70
- to (or aren't allowed to) interact with the file system. A ``.docx`` package is
71
- binary, so an in-memory stream must be an :class:`io.BytesIO` object::
72
-
73
- from io import BytesIO
70
+ to (or aren't allowed to) interact with the file system. Raw DOCX bytes can be
71
+ opened directly::
74
72
 
75
73
  from docx import Document
76
74
 
75
+ with open("foobar.docx", "rb") as file:
76
+ document = Document(file.read())
77
+
78
+ A binary file-like object such as :class:`io.BytesIO` is also supported::
79
+
80
+ from io import BytesIO
81
+
77
82
  with open("foobar.docx", "rb") as file:
78
83
  source_stream = BytesIO(file.read())
79
84
  document = Document(source_stream)
@@ -92,5 +97,23 @@ After saving, rewind the output stream before reading it or opening it again::
92
97
  Always open ``.docx`` files in binary mode (``"rb"`` for reading and ``"wb"``
93
98
  for writing).
94
99
 
100
+ Exporting and copying in memory
101
+ -------------------------------
102
+
103
+ Use :meth:`Document.to_bytes <docx.document.Document.to_bytes>` when the complete
104
+ DOCX package needs to be uploaded, cached, returned over HTTP, or stored in a
105
+ database::
106
+
107
+ content = document.to_bytes()
108
+
109
+ Use :meth:`Document.copy <docx.document.Document.copy>` to create an independent
110
+ snapshot that can be modified without changing the source document::
111
+
112
+ customer_document = document.copy()
113
+ customer_document.add_paragraph("Customer-specific content")
114
+
115
+ The copy has its own XML trees, parts, and relationships. Both operations stay
116
+ in memory and do not create temporary files.
117
+
95
118
  Okay, so you've got a document open and are pretty sure you can save it
96
119
  somewhere later. Next step is to get some content in there ...
@@ -0,0 +1,56 @@
1
+ .. _sanitization:
2
+
3
+ Document sanitization
4
+ =====================
5
+
6
+ Sanitization removes selected package-level information before a document is
7
+ shared. Every operation is disabled by default because removal is destructive.
8
+
9
+ Use :meth:`Document.sanitize() <docx.document.Document.sanitize>` with explicit
10
+ options and inspect its report before saving::
11
+
12
+ from docx import Document
13
+
14
+ document = Document("input.docx")
15
+ report = document.sanitize(
16
+ personal_metadata=True,
17
+ comments=True,
18
+ web_extensions=True,
19
+ formatting_revisions=True,
20
+ )
21
+
22
+ if report.changed:
23
+ document.save("sanitized.docx")
24
+
25
+ The returned :class:`~docx.sanitize.SanitizationReport` identifies scrubbed
26
+ properties, removed XML markers, parts, and relationships, plus any warnings.
27
+ Each removed relationship is represented by
28
+ :class:`~docx.sanitize.RemovedRelationship`. Repeating the same sanitization is
29
+ idempotent: the second report has ``changed == False`` when nothing new was
30
+ added.
31
+
32
+ Options
33
+ -------
34
+
35
+ ``personal_metadata``
36
+ Clears author and last-modified-by values and canonicalizes the revision
37
+ number. Duplicate property elements are removed.
38
+
39
+ ``comments``
40
+ Removes comment markers from all reachable Word XML story parts and removes
41
+ the complete comments relationship tree, including modern comments extension
42
+ parts when present.
43
+
44
+ ``web_extensions``
45
+ Removes web-extension task panes and their related package parts.
46
+
47
+ ``formatting_revisions``
48
+ Removes property-change history such as ``rPrChange`` and ``pPrChange`` while
49
+ retaining the currently effective formatting.
50
+
51
+ Scope boundary
52
+ --------------
53
+
54
+ This API does not accept or reject tracked content revisions. It also does not
55
+ remove Custom XML, macros, OLE objects, external links, or application-specific
56
+ business metadata. Those operations require separate policy decisions.
@@ -18,7 +18,7 @@ classifiers = [
18
18
  "Topic :: Office/Business :: Office Suites",
19
19
  "Topic :: Software Development :: Libraries",
20
20
  ]
21
- dependencies = ["lxml>=3.1.0", "typing_extensions>=4.9.0"]
21
+ dependencies = ["lxml>=6.1.0", "typing_extensions>=4.9.0"]
22
22
  description = "Create, read, and update Microsoft Word .docx files."
23
23
  dynamic = ["version"]
24
24
  keywords = ["docx", "office", "openxml", "word"]
@@ -41,7 +41,7 @@ dev = [
41
41
  "behave>=1.2.6",
42
42
  "pyparsing>=3.2.3",
43
43
  "pyright>=1.1.401",
44
- "pytest>=8.4.0",
44
+ "pytest>=9.0.3",
45
45
  "ruff>=0.11.13",
46
46
  "sphinx-book-theme",
47
47
  "tox>=4.26.0",
@@ -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.1.1"
16
+ __version__ = "0.3.0"
17
17
 
18
18
 
19
19
  __all__ = ["Document"]
@@ -5,6 +5,7 @@ Provides a syntactically more convenient API for interacting with the OpcPackage
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
+ import io
8
9
  import os
9
10
  from typing import IO, TYPE_CHECKING, cast
10
11
 
@@ -16,18 +17,20 @@ if TYPE_CHECKING:
16
17
  from docx.parts.document import DocumentPart
17
18
 
18
19
 
19
- def Document(docx: str | IO[bytes] | None = None) -> DocumentObject:
20
+ def Document(docx: str | bytes | IO[bytes] | None = None) -> DocumentObject:
20
21
  """Return a |Document| object loaded from `docx`, where `docx` can be either a path
21
- to a ``.docx`` file (a string) or a file-like object.
22
+ to a ``.docx`` file, raw DOCX bytes, or a binary file-like object.
22
23
 
23
24
  If `docx` is missing or ``None``, the built-in default document "template" is
24
25
  loaded.
25
26
  """
26
27
  docx = _default_docx_path() if docx is None else docx
28
+ source_name = "<bytes>" if isinstance(docx, bytes) else docx
29
+ docx = io.BytesIO(docx) if isinstance(docx, bytes) else docx
27
30
  document_part = cast("DocumentPart", Package.open(docx).main_document_part)
28
31
  if document_part.content_type != CT.WML_DOCUMENT_MAIN:
29
32
  tmpl = "file '%s' is not a Word file, content type is '%s'"
30
- raise ValueError(tmpl % (docx, document_part.content_type))
33
+ raise ValueError(tmpl % (source_name, document_part.content_type))
31
34
  return document_part.document
32
35
 
33
36
 
@@ -5,11 +5,14 @@
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
+ import io
8
9
  from typing import IO, TYPE_CHECKING, Iterator, List, Sequence
9
10
 
11
+ from docx.api import Document as open_document
10
12
  from docx.blkcntnr import BlockItemContainer
11
13
  from docx.enum.section import WD_SECTION
12
14
  from docx.enum.text import WD_BREAK
15
+ from docx.sanitize import SanitizationReport, sanitize_document
13
16
  from docx.section import Section, Sections
14
17
  from docx.shared import ElementProxy, Emu, Inches, Length
15
18
  from docx.text.run import Run
@@ -182,6 +185,10 @@ class Document(ElementProxy):
182
185
  """A |CoreProperties| object providing Dublin Core properties of document."""
183
186
  return self._part.core_properties
184
187
 
188
+ def copy(self) -> Document:
189
+ """Return an independent in-memory snapshot of this document."""
190
+ return open_document(io.BytesIO(self.to_bytes()))
191
+
185
192
  @property
186
193
  def custom_properties(self) -> CustomProperties:
187
194
  """A |CustomProperties| object providing custom properties of document."""
@@ -223,6 +230,27 @@ class Document(ElementProxy):
223
230
  """
224
231
  self._part.save(path_or_stream)
225
232
 
233
+ def sanitize(
234
+ self,
235
+ *,
236
+ personal_metadata: bool = False,
237
+ comments: bool = False,
238
+ web_extensions: bool = False,
239
+ formatting_revisions: bool = False,
240
+ ) -> SanitizationReport:
241
+ """Apply the explicitly selected package-level cleanup operations.
242
+
243
+ Every option defaults to |False| because sanitization is destructive. The
244
+ returned report describes all package and XML changes made to this document.
245
+ """
246
+ return sanitize_document(
247
+ self,
248
+ personal_metadata=personal_metadata,
249
+ comments=comments,
250
+ web_extensions=web_extensions,
251
+ formatting_revisions=formatting_revisions,
252
+ )
253
+
226
254
  @property
227
255
  def sections(self) -> Sections:
228
256
  """|Sections| object providing access to each section in this document."""
@@ -249,6 +277,12 @@ class Document(ElementProxy):
249
277
  """
250
278
  return self._body.tables
251
279
 
280
+ def to_bytes(self) -> bytes:
281
+ """Serialize this document as a complete in-memory DOCX package."""
282
+ with io.BytesIO() as stream:
283
+ self.save(stream)
284
+ return stream.getvalue()
285
+
252
286
  @property
253
287
  def _block_width(self) -> Length:
254
288
  """A |Length| object specifying the space between margins in last section."""
@@ -101,6 +101,7 @@ class MIME_TYPE:
101
101
  """Image content types."""
102
102
 
103
103
  BMP = "image/bmp"
104
+ EMF = "image/x-emf"
104
105
  GIF = "image/gif"
105
106
  JPEG = "image/jpeg"
106
107
  PNG = "image/png"
@@ -13,7 +13,7 @@ class Emf(BaseImageHeader):
13
13
  @property
14
14
  def content_type(self):
15
15
  """
16
- MIME content type for this image, unconditionally `image/emf` for
16
+ MIME content type for this image, unconditionally `image/x-emf` for
17
17
  EMF images.
18
18
  """
19
19
  return MIME_TYPE.EMF
@@ -38,7 +38,6 @@ class Emf(BaseImageHeader):
38
38
  y1 = stream_rdr.read_long(20)
39
39
 
40
40
  frame = tuple(map(stream_rdr.read_long, (24, 28, 32, 36)))
41
- size = x1 - x0, y1 - y0
42
41
 
43
42
  xdpi = 2540.0 * (x1 - x0) / (frame[2] - frame[0])
44
43
  ydpi = 2540.0 * (y1 - y0) / (frame[3] - frame[1])