python-docx-oss 0.1.1__tar.gz → 0.2.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 (536) hide show
  1. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/HISTORY.md +11 -0
  2. {python_docx_oss-0.1.1/src/python_docx_oss.egg-info → python_docx_oss-0.2.0}/PKG-INFO +15 -12
  3. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/README.md +15 -12
  4. python_docx_oss-0.2.0/docs/_static/img/oss.png +0 -0
  5. python_docx_oss-0.2.0/docs/dev/upstream-maintenance.rst +95 -0
  6. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/index.rst +2 -1
  7. python_docx_oss-0.2.0/docs/user/compatibility.rst +48 -0
  8. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/custom-xml.rst +9 -1
  9. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/documents.rst +27 -4
  10. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/__init__.py +1 -1
  11. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/api.py +6 -3
  12. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/document.py +12 -0
  13. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/constants.py +1 -0
  14. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/emf.py +1 -2
  15. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/rel.py +5 -0
  16. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/customxml.py +1 -1
  17. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/document.py +18 -0
  18. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0/src/python_docx_oss.egg-info}/PKG-INFO +15 -12
  19. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/python_docx_oss.egg-info/SOURCES.txt +2 -0
  20. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/integration/customxml/test_custom_xml_roundtrip.py +30 -0
  21. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/integration/test_word_roundtrip.py +51 -0
  22. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_rel.py +9 -0
  23. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_api.py +20 -0
  24. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_document.py +8 -0
  25. python_docx_oss-0.1.1/docs/_static/img/oss.png +0 -0
  26. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/LICENSE +0 -0
  27. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/MANIFEST.in +0 -0
  28. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/Makefile +0 -0
  29. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_static/.gitignore +0 -0
  30. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_static/img/comment-parts.png +0 -0
  31. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_static/img/example-docx-01.png +0 -0
  32. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_static/img/hdrftr-01.png +0 -0
  33. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_static/img/hdrftr-02.png +0 -0
  34. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_templates/layout.html +0 -0
  35. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_templates/sidebarlinks.html +0 -0
  36. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_themes/armstrong/LICENSE +0 -0
  37. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_themes/armstrong/layout.html +0 -0
  38. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_themes/armstrong/rtd-themes.conf +0 -0
  39. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_themes/armstrong/static/rtd.css_t +0 -0
  40. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_themes/armstrong/theme.conf +0 -0
  41. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/_themes/armstrong/theme.conf.orig +0 -0
  42. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/comments.rst +0 -0
  43. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/dml.rst +0 -0
  44. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/document.rst +0 -0
  45. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/MsoColorType.rst +0 -0
  46. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/MsoThemeColorIndex.rst +0 -0
  47. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdAlignParagraph.rst +0 -0
  48. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdBuiltinStyle.rst +0 -0
  49. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdCellVerticalAlignment.rst +0 -0
  50. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdColorIndex.rst +0 -0
  51. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdLineSpacing.rst +0 -0
  52. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdOrientation.rst +0 -0
  53. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdRowAlignment.rst +0 -0
  54. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdRowHeightRule.rst +0 -0
  55. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdSectionStart.rst +0 -0
  56. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdStyleType.rst +0 -0
  57. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdTabAlignment.rst +0 -0
  58. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdTabLeader.rst +0 -0
  59. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdTableDirection.rst +0 -0
  60. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/WdUnderline.rst +0 -0
  61. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/enum/index.rst +0 -0
  62. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/section.rst +0 -0
  63. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/settings.rst +0 -0
  64. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/shape.rst +0 -0
  65. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/shared.rst +0 -0
  66. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/style.rst +0 -0
  67. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/table.rst +0 -0
  68. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/api/text.rst +0 -0
  69. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/conf.py +0 -0
  70. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/comments.rst +0 -0
  71. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/coreprops.rst +0 -0
  72. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/header.rst +0 -0
  73. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/numbering.rst +0 -0
  74. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/sections.rst +0 -0
  75. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/settings.rst +0 -0
  76. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/shapes/index.rst +0 -0
  77. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/shapes/picture.rst +0 -0
  78. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/shapes/shapes-inline-size.rst +0 -0
  79. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/shapes/shapes-inline.rst +0 -0
  80. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/styles/character-style.rst +0 -0
  81. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/styles/index.rst +0 -0
  82. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/styles/latent-styles.rst +0 -0
  83. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/styles/paragraph-style.rst +0 -0
  84. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/styles/style.rst +0 -0
  85. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/styles/styles.rst +0 -0
  86. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/table/cell-merge.rst +0 -0
  87. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/table/index.rst +0 -0
  88. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/table/table-cell.rst +0 -0
  89. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/table/table-props.rst +0 -0
  90. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/table/table-row.rst +0 -0
  91. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/breaks.rst +0 -0
  92. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/font-color.rst +0 -0
  93. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/font-highlight-color.rst +0 -0
  94. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/font.rst +0 -0
  95. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/hyperlink.rst +0 -0
  96. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/index.rst +0 -0
  97. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/paragraph-format.rst +0 -0
  98. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/run-content.rst +0 -0
  99. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/tab-stops.rst +0 -0
  100. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/features/text/underline.rst +0 -0
  101. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/index.rst +0 -0
  102. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/schema/ct_body.rst +0 -0
  103. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/schema/ct_document.rst +0 -0
  104. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/dev/analysis/schema/ct_p.rst +0 -0
  105. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/requirements.txt +0 -0
  106. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/api-concepts.rst +0 -0
  107. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/comments.rst +0 -0
  108. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/custom-properties.rst +0 -0
  109. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/hdrftr.rst +0 -0
  110. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/install.rst +0 -0
  111. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/quickstart.rst +0 -0
  112. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/sections.rst +0 -0
  113. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/shapes.rst +0 -0
  114. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/styles-understanding.rst +0 -0
  115. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/styles-using.rst +0 -0
  116. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/tables.rst +0 -0
  117. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/docs/user/text.rst +0 -0
  118. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/api-open-document.feature +0 -0
  119. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/blk-add-paragraph.feature +0 -0
  120. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/blk-add-table.feature +0 -0
  121. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/blk-iter-inner-content.feature +0 -0
  122. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/cmt-mutations.feature +0 -0
  123. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/cmt-props.feature +0 -0
  124. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-access-collections.feature +0 -0
  125. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-access-sections.feature +0 -0
  126. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-add-comment.feature +0 -0
  127. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-add-heading.feature +0 -0
  128. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-add-page-break.feature +0 -0
  129. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-add-paragraph.feature +0 -0
  130. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-add-picture.feature +0 -0
  131. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-add-section.feature +0 -0
  132. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-add-table.feature +0 -0
  133. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-comments.feature +0 -0
  134. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-coreprops.feature +0 -0
  135. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-customprops.feature +0 -0
  136. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-settings.feature +0 -0
  137. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/doc-styles.feature +0 -0
  138. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/environment.py +0 -0
  139. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/hdr-header-footer.feature +0 -0
  140. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/hlk-props.feature +0 -0
  141. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/img-characterize-image.feature +0 -0
  142. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/num-access-numbering-part.feature +0 -0
  143. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/par-access-inner-content.feature +0 -0
  144. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/par-access-parfmt.feature +0 -0
  145. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/par-add-run.feature +0 -0
  146. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/par-alignment-prop.feature +0 -0
  147. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/par-clear-paragraph.feature +0 -0
  148. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/par-insert-paragraph.feature +0 -0
  149. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/par-set-text.feature +0 -0
  150. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/par-style-prop.feature +0 -0
  151. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/pbk-split-para.feature +0 -0
  152. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/run-access-font.feature +0 -0
  153. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/run-access-inner-content.feature +0 -0
  154. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/run-add-content.feature +0 -0
  155. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/run-add-picture.feature +0 -0
  156. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/run-char-style.feature +0 -0
  157. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/run-clear-run.feature +0 -0
  158. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/run-enum-props.feature +0 -0
  159. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sct-section.feature +0 -0
  160. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/shp-inline-shape-access.feature +0 -0
  161. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/shp-inline-shape-size.feature +0 -0
  162. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/api.py +0 -0
  163. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/block.py +0 -0
  164. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/comments.py +0 -0
  165. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/coreprops.py +0 -0
  166. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/customprops.py +0 -0
  167. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/document.py +0 -0
  168. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/font.py +0 -0
  169. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/hdrftr.py +0 -0
  170. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/helpers.py +0 -0
  171. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/hyperlink.py +0 -0
  172. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/image.py +0 -0
  173. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/numbering.py +0 -0
  174. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/pagebreak.py +0 -0
  175. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/paragraph.py +0 -0
  176. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/parfmt.py +0 -0
  177. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/section.py +0 -0
  178. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/settings.py +0 -0
  179. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/shape.py +0 -0
  180. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/shared.py +0 -0
  181. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/styles.py +0 -0
  182. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/table.py +0 -0
  183. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/tabstops.py +0 -0
  184. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/blk-containing-table.docx +0 -0
  185. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/blk-paras-and-tables.docx +0 -0
  186. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/comments-rich-para.docx +0 -0
  187. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/court-exif.jpg +0 -0
  188. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-access-sections.docx +0 -0
  189. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-add-section.docx +0 -0
  190. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-coreprops.docx +0 -0
  191. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-customprops-legacy.docx +0 -0
  192. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-customprops.docx +0 -0
  193. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-default.docx +0 -0
  194. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-no-coreprops.docx +0 -0
  195. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-no-customprops.docx +0 -0
  196. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-odd-even-hdrs.docx +0 -0
  197. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/doc-word-default-blank.docx +0 -0
  198. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/fnt-color.docx +0 -0
  199. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/hdr-header-footer.docx +0 -0
  200. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/jfif-300-dpi.jpg +0 -0
  201. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/jpeg420exif.jpg +0 -0
  202. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/lena.bmp +0 -0
  203. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/lena.gif +0 -0
  204. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/lena.tif +0 -0
  205. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/lena_std.jpg +0 -0
  206. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/monty-truth.png +0 -0
  207. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/mountain.bmp +0 -0
  208. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/num-having-numbering-part.docx +0 -0
  209. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/par-alignment.docx +0 -0
  210. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/par-hlink-frags.docx +0 -0
  211. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/par-hyperlinks.docx +0 -0
  212. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/par-known-paragraphs.docx +0 -0
  213. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/par-known-styles.docx +0 -0
  214. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/par-rendered-page-breaks.docx +0 -0
  215. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/python-icon.jpeg +0 -0
  216. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/run-char-style.docx +0 -0
  217. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/run-enumerated-props.docx +0 -0
  218. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/sample.tif +0 -0
  219. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/sct-first-page-hdrftr.docx +0 -0
  220. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/sct-inner-content.docx +0 -0
  221. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/sct-section-props.docx +0 -0
  222. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/set-no-settings-part.docx +0 -0
  223. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/shp-inline-shape-access.docx +0 -0
  224. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/sty-behav-props.docx +0 -0
  225. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/sty-having-no-styles-part.docx +0 -0
  226. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/sty-having-styles-part.docx +0 -0
  227. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/sty-known-styles.docx +0 -0
  228. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tab-stops.docx +0 -0
  229. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tbl-2x2-table.docx +0 -0
  230. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tbl-cell-access.docx +0 -0
  231. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tbl-cell-props.docx +0 -0
  232. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tbl-col-props.docx +0 -0
  233. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tbl-having-applied-style.docx +0 -0
  234. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tbl-having-tables.docx +0 -0
  235. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tbl-on-off-props.docx +0 -0
  236. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/tbl-props.docx +0 -0
  237. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/test.png +0 -0
  238. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/txt-font-highlight-color.docx +0 -0
  239. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/test_files/txt-font-props.docx +0 -0
  240. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/steps/text.py +0 -0
  241. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sty-access-font.feature +0 -0
  242. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sty-access-latent-styles.feature +0 -0
  243. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sty-access-parfmt.feature +0 -0
  244. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sty-add-style.feature +0 -0
  245. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sty-delete-style.feature +0 -0
  246. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sty-latent-add-del.feature +0 -0
  247. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sty-latent-props.feature +0 -0
  248. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/sty-style-props.feature +0 -0
  249. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tab-access-tabs.feature +0 -0
  250. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tab-tabstop-props.feature +0 -0
  251. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-add-row-or-col.feature +0 -0
  252. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-cell-access.feature +0 -0
  253. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-cell-add-table.feature +0 -0
  254. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-cell-props.feature +0 -0
  255. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-cell-text.feature +0 -0
  256. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-col-props.feature +0 -0
  257. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-item-access.feature +0 -0
  258. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-merge-cells.feature +0 -0
  259. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-props.feature +0 -0
  260. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-row-props.feature +0 -0
  261. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/tbl-style.feature +0 -0
  262. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/txt-add-break.feature +0 -0
  263. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/txt-font-color.feature +0 -0
  264. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/txt-font-props.feature +0 -0
  265. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/features/txt-parfmt-props.feature +0 -0
  266. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/pyproject.toml +0 -0
  267. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/requirements-dev.txt +0 -0
  268. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/requirements-docs.txt +0 -0
  269. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/requirements-test.txt +0 -0
  270. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/requirements.txt +0 -0
  271. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/setup.cfg +0 -0
  272. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/blkcntnr.py +0 -0
  273. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/comments.py +0 -0
  274. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/dml/__init__.py +0 -0
  275. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/dml/color.py +0 -0
  276. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/drawing/__init__.py +0 -0
  277. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/enum/__init__.py +0 -0
  278. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/enum/base.py +0 -0
  279. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/enum/dml.py +0 -0
  280. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/enum/section.py +0 -0
  281. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/enum/shape.py +0 -0
  282. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/enum/style.py +0 -0
  283. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/enum/table.py +0 -0
  284. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/enum/text.py +0 -0
  285. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/exceptions.py +0 -0
  286. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/__init__.py +0 -0
  287. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/bmp.py +0 -0
  288. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/exceptions.py +0 -0
  289. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/gif.py +0 -0
  290. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/helpers.py +0 -0
  291. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/image.py +0 -0
  292. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/jpeg.py +0 -0
  293. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/png.py +0 -0
  294. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/svg.py +0 -0
  295. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/image/tiff.py +0 -0
  296. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/__init__.py +0 -0
  297. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/constants.py +0 -0
  298. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/coreprops.py +0 -0
  299. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/customprops.py +0 -0
  300. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/exceptions.py +0 -0
  301. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/oxml.py +0 -0
  302. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/package.py +0 -0
  303. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/packuri.py +0 -0
  304. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/part.py +0 -0
  305. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/parts/__init__.py +0 -0
  306. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/parts/coreprops.py +0 -0
  307. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/parts/customprops.py +0 -0
  308. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/phys_pkg.py +0 -0
  309. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/pkgreader.py +0 -0
  310. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/pkgwriter.py +0 -0
  311. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/shared.py +0 -0
  312. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/opc/spec.py +0 -0
  313. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/__init__.py +0 -0
  314. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/comments.py +0 -0
  315. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/coreprops.py +0 -0
  316. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/customprops.py +0 -0
  317. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/dml/CT_ExtensionList.py +0 -0
  318. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/document.py +0 -0
  319. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/drawing.py +0 -0
  320. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/exceptions.py +0 -0
  321. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/ns.py +0 -0
  322. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/numbering.py +0 -0
  323. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/parser.py +0 -0
  324. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/section.py +0 -0
  325. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/settings.py +0 -0
  326. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/shape.py +0 -0
  327. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/shared.py +0 -0
  328. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/simpletypes.py +0 -0
  329. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/styles.py +0 -0
  330. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/table.py +0 -0
  331. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/text/__init__.py +0 -0
  332. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/text/font.py +0 -0
  333. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/text/hyperlink.py +0 -0
  334. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/text/pagebreak.py +0 -0
  335. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/text/paragraph.py +0 -0
  336. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/text/parfmt.py +0 -0
  337. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/text/run.py +0 -0
  338. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/oxml/xmlchemy.py +0 -0
  339. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/package.py +0 -0
  340. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/__init__.py +0 -0
  341. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/comments.py +0 -0
  342. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/hdrftr.py +0 -0
  343. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/image.py +0 -0
  344. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/numbering.py +0 -0
  345. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/settings.py +0 -0
  346. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/story.py +0 -0
  347. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/parts/styles.py +0 -0
  348. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/py.typed +0 -0
  349. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/section.py +0 -0
  350. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/settings.py +0 -0
  351. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/shape.py +0 -0
  352. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/shared.py +0 -0
  353. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/styles/__init__.py +0 -0
  354. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/styles/latent.py +0 -0
  355. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/styles/style.py +0 -0
  356. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/styles/styles.py +0 -0
  357. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/table.py +0 -0
  358. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-comments.xml +0 -0
  359. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/[Content_Types].xml +0 -0
  360. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/_rels/.rels +0 -0
  361. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/customXml/_rels/item1.xml.rels +0 -0
  362. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/customXml/item1.xml +0 -0
  363. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/customXml/itemProps1.xml +0 -0
  364. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/docProps/app.xml +0 -0
  365. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/docProps/core.xml +0 -0
  366. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/docProps/thumbnail.jpeg +0 -0
  367. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/_rels/document.xml.rels +0 -0
  368. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/document.xml +0 -0
  369. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/fontTable.xml +0 -0
  370. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/numbering.xml +0 -0
  371. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/settings.xml +0 -0
  372. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/styles.xml +0 -0
  373. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/stylesWithEffects.xml +0 -0
  374. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/theme/theme1.xml +0 -0
  375. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-docx-template/word/webSettings.xml +0 -0
  376. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-footer.xml +0 -0
  377. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-header.xml +0 -0
  378. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-numbering.xml +0 -0
  379. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-settings.xml +0 -0
  380. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default-styles.xml +0 -0
  381. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/templates/default.docx +0 -0
  382. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/text/__init__.py +0 -0
  383. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/text/font.py +0 -0
  384. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/text/hyperlink.py +0 -0
  385. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/text/pagebreak.py +0 -0
  386. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/text/paragraph.py +0 -0
  387. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/text/parfmt.py +0 -0
  388. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/text/run.py +0 -0
  389. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/text/tabstops.py +0 -0
  390. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/docx/types.py +0 -0
  391. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/python_docx_oss.egg-info/dependency_links.txt +0 -0
  392. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/python_docx_oss.egg-info/requires.txt +0 -0
  393. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/src/python_docx_oss.egg-info/top_level.txt +0 -0
  394. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/__init__.py +0 -0
  395. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/conftest.py +0 -0
  396. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/dml/__init__.py +0 -0
  397. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/dml/test_color.py +0 -0
  398. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/fixtures/README.md +0 -0
  399. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/fixtures/customxml/generate_fixture.py +0 -0
  400. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/fixtures/customxml/multiple-custom-xml-parts.docx +0 -0
  401. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/fixtures/documents/word-blank.docx +0 -0
  402. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/fixtures/drawing/word-floating-picture.docx +0 -0
  403. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/fixtures/fonts/word-east-asian-fonts.docx +0 -0
  404. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/fixtures/images/word-svg-image.docx +0 -0
  405. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/__init__.py +0 -0
  406. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_bmp.py +0 -0
  407. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_emf.py +0 -0
  408. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_gif.py +0 -0
  409. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_helpers.py +0 -0
  410. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_image.py +0 -0
  411. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_jpeg.py +0 -0
  412. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_png.py +0 -0
  413. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_svg.py +0 -0
  414. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/image/test_tiff.py +0 -0
  415. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/integration/__init__.py +0 -0
  416. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/integration/customxml/__init__.py +0 -0
  417. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/__init__.py +0 -0
  418. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/parts/__init__.py +0 -0
  419. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/parts/test_coreprops.py +0 -0
  420. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/parts/test_customprops.py +0 -0
  421. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_coreprops.py +0 -0
  422. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_customprops.py +0 -0
  423. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_oxml.py +0 -0
  424. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_package.py +0 -0
  425. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_packuri.py +0 -0
  426. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_part.py +0 -0
  427. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_phys_pkg.py +0 -0
  428. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_pkgreader.py +0 -0
  429. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/test_pkgwriter.py +0 -0
  430. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/unitdata/__init__.py +0 -0
  431. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/unitdata/rels.py +0 -0
  432. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/opc/unitdata/types.py +0 -0
  433. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/__init__.py +0 -0
  434. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/parts/__init__.py +0 -0
  435. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/parts/test_document.py +0 -0
  436. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/parts/unitdata/__init__.py +0 -0
  437. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/parts/unitdata/document.py +0 -0
  438. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/test__init__.py +0 -0
  439. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/test_comments.py +0 -0
  440. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/test_document.py +0 -0
  441. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/test_ns.py +0 -0
  442. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/test_section.py +0 -0
  443. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/test_styles.py +0 -0
  444. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/test_table.py +0 -0
  445. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/test_xmlchemy.py +0 -0
  446. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/text/__init__.py +0 -0
  447. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/text/test_hyperlink.py +0 -0
  448. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/text/test_run.py +0 -0
  449. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/unitdata/__init__.py +0 -0
  450. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/unitdata/dml.py +0 -0
  451. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/unitdata/numbering.py +0 -0
  452. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/unitdata/section.py +0 -0
  453. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/unitdata/shared.py +0 -0
  454. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/unitdata/styles.py +0 -0
  455. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/unitdata/table.py +0 -0
  456. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/oxml/unitdata/text.py +0 -0
  457. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/__init__.py +0 -0
  458. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_comments.py +0 -0
  459. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_customxml.py +0 -0
  460. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_document.py +0 -0
  461. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_hdrftr.py +0 -0
  462. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_image.py +0 -0
  463. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_numbering.py +0 -0
  464. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_settings.py +0 -0
  465. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_story.py +0 -0
  466. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/parts/test_styles.py +0 -0
  467. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/styles/__init__.py +0 -0
  468. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/styles/test_latent.py +0 -0
  469. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/styles/test_style.py +0 -0
  470. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/styles/test_styles.py +0 -0
  471. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_blkcntnr.py +0 -0
  472. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_comments.py +0 -0
  473. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_drawing.py +0 -0
  474. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_enum.py +0 -0
  475. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/150-dpi.png +0 -0
  476. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/300-dpi.TIF +0 -0
  477. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/300-dpi.jpg +0 -0
  478. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/300-dpi.png +0 -0
  479. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/72-dpi.tiff +0 -0
  480. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/CVS_LOGO.WMF +0 -0
  481. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/blk-inner-content.docx +0 -0
  482. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/exif-420-dpi.jpg +0 -0
  483. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/[Content_Types].xml +0 -0
  484. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/_rels/.rels +0 -0
  485. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/customXml/_rels/item1.xml.rels +0 -0
  486. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/customXml/item1.xml +0 -0
  487. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/customXml/itemProps1.xml +0 -0
  488. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/docProps/app.xml +0 -0
  489. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/docProps/core.xml +0 -0
  490. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/docProps/thumbnail.jpeg +0 -0
  491. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/_rels/document.xml.rels +0 -0
  492. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/document.xml +0 -0
  493. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/fontTable.xml +0 -0
  494. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/numbering.xml +0 -0
  495. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/settings.xml +0 -0
  496. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/styles.xml +0 -0
  497. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/stylesWithEffects.xml +0 -0
  498. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/theme/theme1.xml +0 -0
  499. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/expanded_docx/word/webSettings.xml +0 -0
  500. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/having-images.docx +0 -0
  501. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/jfif-iguana.jpg +0 -0
  502. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/jpeg_without_app0_and_app1.jpg +0 -0
  503. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/little-endian.tif +0 -0
  504. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/monty-truth.png +0 -0
  505. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/python-icon.jpeg +0 -0
  506. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/python-icon.png +0 -0
  507. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/python-powered.png +0 -0
  508. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/python.bmp +0 -0
  509. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/sct-inner-content.docx +0 -0
  510. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/snippets/add-row-col.txt +0 -0
  511. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/snippets/inline.txt +0 -0
  512. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/snippets/new-tbl.txt +0 -0
  513. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/snippets/tbl-cells.txt +0 -0
  514. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/sonic.emf +0 -0
  515. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/sonic.gif +0 -0
  516. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_files/test.docx +0 -0
  517. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_package.py +0 -0
  518. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_section.py +0 -0
  519. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_settings.py +0 -0
  520. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_shape.py +0 -0
  521. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_shared.py +0 -0
  522. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/test_table.py +0 -0
  523. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/text/__init__.py +0 -0
  524. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/text/test_font.py +0 -0
  525. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/text/test_hyperlink.py +0 -0
  526. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/text/test_pagebreak.py +0 -0
  527. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/text/test_paragraph.py +0 -0
  528. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/text/test_parfmt.py +0 -0
  529. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/text/test_run.py +0 -0
  530. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/text/test_tabstops.py +0 -0
  531. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/unitdata.py +0 -0
  532. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/unitutil/__init__.py +0 -0
  533. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/unitutil/cxml.py +0 -0
  534. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/unitutil/file.py +0 -0
  535. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tests/unitutil/mock.py +0 -0
  536. {python_docx_oss-0.1.1 → python_docx_oss-0.2.0}/tox.ini +0 -0
@@ -1,5 +1,16 @@
1
1
  ## Release History
2
2
 
3
+ **0.2.0 (2026-08-24)**
4
+
5
+ - Added direct loading from raw DOCX bytes with ``Document(bytes)``.
6
+ - Added ``Document.to_bytes()`` for in-memory export and ``Document.copy()``
7
+ for independent document snapshots.
8
+ - Added safe removal of Custom XML parts, including their document and property
9
+ relationships.
10
+ - Added real-document EMF round-trip coverage and corrected the EMF MIME type.
11
+ - Documented the capability matrix, upstream maintenance policy, and
12
+ compatibility boundary with official ``python-docx``.
13
+
3
14
  **0.1.1 (2026-08-21)**
4
15
 
5
16
  - 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.2.0
4
4
  Summary: Create, read, and update Microsoft Word .docx files.
5
5
  Author: Ethan St Lee
6
6
  License-Expression: MIT
@@ -53,18 +53,19 @@ 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
56
+ ## Capability Matrix
57
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 | ✓ |
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
+ | Package inspection, diff, and sanitization | Planned | — |
68
69
 
69
70
  ## Installation
70
71
 
@@ -170,6 +171,8 @@ available through `Document.add_float_picture()` and `Run.add_float_picture()`.
170
171
  - [API reference](docs/index.rst#api-documentation)
171
172
  - [Custom properties](docs/user/custom-properties.rst)
172
173
  - [Custom XML](docs/user/custom-xml.rst)
174
+ - [python-docx compatibility](docs/user/compatibility.rst)
175
+ - [Upstream maintenance](docs/dev/upstream-maintenance.rst)
173
176
  - [Release history](HISTORY.md)
174
177
 
175
178
  ## Quality and Testing
@@ -24,18 +24,19 @@ 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
+ | Package inspection, diff, and sanitization | Planned | — |
39
40
 
40
41
  ## Installation
41
42
 
@@ -141,6 +142,8 @@ available through `Document.add_float_picture()` and `Run.add_float_picture()`.
141
142
  - [API reference](docs/index.rst#api-documentation)
142
143
  - [Custom properties](docs/user/custom-properties.rst)
143
144
  - [Custom XML](docs/user/custom-xml.rst)
145
+ - [python-docx compatibility](docs/user/compatibility.rst)
146
+ - [Upstream maintenance](docs/dev/upstream-maintenance.rst)
144
147
  - [Release history](HISTORY.md)
145
148
 
146
149
  ## Quality and Testing
@@ -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.
@@ -97,6 +97,7 @@ User Guide
97
97
  user/shapes
98
98
  user/custom-properties
99
99
  user/custom-xml
100
+ user/compatibility
100
101
 
101
102
 
102
103
  API Documentation
@@ -117,11 +118,11 @@ API Documentation
117
118
  api/shared
118
119
  api/enum/index
119
120
 
120
-
121
121
  Contributor Guide
122
122
  -----------------
123
123
 
124
124
  .. toctree::
125
125
  :maxdepth: 1
126
126
 
127
+ dev/upstream-maintenance
127
128
  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 ...
@@ -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.2.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,8 +5,10 @@
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
@@ -182,6 +184,10 @@ class Document(ElementProxy):
182
184
  """A |CoreProperties| object providing Dublin Core properties of document."""
183
185
  return self._part.core_properties
184
186
 
187
+ def copy(self) -> Document:
188
+ """Return an independent in-memory snapshot of this document."""
189
+ return open_document(io.BytesIO(self.to_bytes()))
190
+
185
191
  @property
186
192
  def custom_properties(self) -> CustomProperties:
187
193
  """A |CustomProperties| object providing custom properties of document."""
@@ -249,6 +255,12 @@ class Document(ElementProxy):
249
255
  """
250
256
  return self._body.tables
251
257
 
258
+ def to_bytes(self) -> bytes:
259
+ """Serialize this document as a complete in-memory DOCX package."""
260
+ with io.BytesIO() as stream:
261
+ self.save(stream)
262
+ return stream.getvalue()
263
+
252
264
  @property
253
265
  def _block_width(self) -> Length:
254
266
  """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])
@@ -28,6 +28,11 @@ class Relationships(Dict[str, "_Relationship"]):
28
28
  self._target_parts_by_rId[rId] = target
29
29
  return rel
30
30
 
31
+ def __delitem__(self, rId: str) -> None:
32
+ """Remove the relationship and its cached target-part reference."""
33
+ super().__delitem__(rId)
34
+ self._target_parts_by_rId.pop(rId, None)
35
+
31
36
  def get_or_add(self, reltype: str, target_part: Part) -> _Relationship:
32
37
  """Return relationship of `reltype` to `target_part`, newly added if not already
33
38
  present in collection."""
@@ -59,7 +59,7 @@ class CustomXmlPart(XmlPart):
59
59
  """
60
60
  return self.element.getchildren()
61
61
 
62
- def add_item(self, tag: str, text: str = "", **attrib):
62
+ def add_item(self, tag: str, text: str = "", **attrib: str) -> None:
63
63
  """
64
64
  Add a child element to root.
65
65
  """
@@ -54,6 +54,24 @@ class DocumentPart(StoryPart):
54
54
  rId = self.relate_to(header_part, RT.HEADER)
55
55
  return header_part, rId
56
56
 
57
+ def delete_custom_xml_part(self, part: CustomXmlPart) -> None:
58
+ """Delete a Custom XML part related to this document.
59
+
60
+ Related Custom XML property parts are detached with the part and omitted from
61
+ the package when it is next saved.
62
+ """
63
+ matching_rIds = [
64
+ rId
65
+ for rId, rel in self.rels.items()
66
+ if rel.reltype == RT.CUSTOM_XML and not rel.is_external and rel.target_part is part
67
+ ]
68
+ if not matching_rIds:
69
+ raise ValueError(f"part '{part.partname}' is not related to this document")
70
+
71
+ part.drop_rels(lambda rel: rel.reltype == RT.CUSTOM_XML_PROPS)
72
+ for rId in matching_rIds:
73
+ del self.rels[rId]
74
+
57
75
  @property
58
76
  def comments(self) -> Comments:
59
77
  """|Comments| object providing access to the comments added to this document."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-docx-oss
3
- Version: 0.1.1
3
+ Version: 0.2.0
4
4
  Summary: Create, read, and update Microsoft Word .docx files.
5
5
  Author: Ethan St Lee
6
6
  License-Expression: MIT
@@ -53,18 +53,19 @@ 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
56
+ ## Capability Matrix
57
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 | ✓ |
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
+ | Package inspection, diff, and sanitization | Planned | — |
68
69
 
69
70
  ## Installation
70
71
 
@@ -170,6 +171,8 @@ available through `Document.add_float_picture()` and `Run.add_float_picture()`.
170
171
  - [API reference](docs/index.rst#api-documentation)
171
172
  - [Custom properties](docs/user/custom-properties.rst)
172
173
  - [Custom XML](docs/user/custom-xml.rst)
174
+ - [python-docx compatibility](docs/user/compatibility.rst)
175
+ - [Upstream maintenance](docs/dev/upstream-maintenance.rst)
173
176
  - [Release history](HISTORY.md)
174
177
 
175
178
  ## Quality and Testing
@@ -53,6 +53,7 @@ docs/api/enum/WdTabLeader.rst
53
53
  docs/api/enum/WdTableDirection.rst
54
54
  docs/api/enum/WdUnderline.rst
55
55
  docs/api/enum/index.rst
56
+ docs/dev/upstream-maintenance.rst
56
57
  docs/dev/analysis/index.rst
57
58
  docs/dev/analysis/features/comments.rst
58
59
  docs/dev/analysis/features/coreprops.rst
@@ -90,6 +91,7 @@ docs/dev/analysis/schema/ct_document.rst
90
91
  docs/dev/analysis/schema/ct_p.rst
91
92
  docs/user/api-concepts.rst
92
93
  docs/user/comments.rst
94
+ docs/user/compatibility.rst
93
95
  docs/user/custom-properties.rst
94
96
  docs/user/custom-xml.rst
95
97
  docs/user/documents.rst
@@ -88,3 +88,33 @@ class DescribeMultipleCustomXmlParts:
88
88
 
89
89
  with pytest.raises(ValueError, match="part already exists at '/customXml/item1.xml'"):
90
90
  document.part.add_custom_xml_part("<duplicate/>", file_name="item1")
91
+
92
+ def it_round_trips_deleting_a_part_and_reuses_its_partname(self):
93
+ document = Document(io.BytesIO(FIXTURE.read_bytes()))
94
+ customers = _parts_by_name(document)["/customXml/item1.xml"]
95
+
96
+ document.part.delete_custom_xml_part(customers)
97
+ replacement = document.part.add_custom_xml_part(f'<audit xmlns="{AUDIT_NS}"/>')
98
+ assert str(replacement.partname) == "/customXml/item1.xml"
99
+
100
+ output = io.BytesIO()
101
+ document.save(output)
102
+ reopened = Document(io.BytesIO(output.getvalue()))
103
+ reopened_parts = _parts_by_name(reopened)
104
+
105
+ assert set(reopened_parts) == {"/customXml/item1.xml", "/customXml/item3.xml"}
106
+ assert reopened_parts["/customXml/item1.xml"].tag == f"{{{AUDIT_NS}}}audit"
107
+ with ZipFile(io.BytesIO(output.getvalue())) as package:
108
+ names = set(package.namelist())
109
+ assert "customXml/itemProps1.xml" not in names
110
+ assert "customXml/_rels/item1.xml.rels" not in names
111
+ assert "customXml/itemProps3.xml" in names
112
+ assert "customXml/_rels/item3.xml.rels" in names
113
+
114
+ def it_rejects_deleting_a_part_twice(self):
115
+ document = Document(io.BytesIO(FIXTURE.read_bytes()))
116
+ customers = _parts_by_name(document)["/customXml/item1.xml"]
117
+ document.part.delete_custom_xml_part(customers)
118
+
119
+ with pytest.raises(ValueError, match="is not related to this document"):
120
+ document.part.delete_custom_xml_part(customers)