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.
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/HISTORY.md +19 -0
- {python_docx_oss-0.1.1/src/python_docx_oss.egg-info → python_docx_oss-0.3.0}/PKG-INFO +18 -14
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/README.md +16 -12
- python_docx_oss-0.3.0/docs/_static/img/oss.png +0 -0
- python_docx_oss-0.3.0/docs/api/sanitize.rst +60 -0
- python_docx_oss-0.3.0/docs/dev/upstream-maintenance.rst +95 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/index.rst +7 -2
- python_docx_oss-0.3.0/docs/user/compatibility.rst +48 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/custom-xml.rst +9 -1
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/documents.rst +27 -4
- python_docx_oss-0.3.0/docs/user/sanitization.rst +56 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/pyproject.toml +2 -2
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/__init__.py +1 -1
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/api.py +6 -3
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/document.py +34 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/constants.py +1 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/emf.py +1 -2
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/coreprops.py +35 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/part.py +8 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/rel.py +5 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/customxml.py +1 -1
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/document.py +18 -0
- python_docx_oss-0.3.0/src/docx/sanitize/__init__.py +10 -0
- python_docx_oss-0.3.0/src/docx/sanitize/cleaner.py +221 -0
- python_docx_oss-0.3.0/src/docx/sanitize/result.py +38 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0/src/python_docx_oss.egg-info}/PKG-INFO +18 -14
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/python_docx_oss.egg-info/SOURCES.txt +9 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/python_docx_oss.egg-info/requires.txt +1 -1
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/README.md +2 -0
- python_docx_oss-0.3.0/tests/fixtures/comments/word-comments-rich.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/integration/customxml/test_custom_xml_roundtrip.py +30 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/integration/test_word_roundtrip.py +51 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_coreprops.py +16 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_part.py +11 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_rel.py +9 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_api.py +20 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_document.py +8 -0
- python_docx_oss-0.3.0/tests/test_sanitize.py +197 -0
- python_docx_oss-0.1.1/docs/_static/img/oss.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/LICENSE +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/MANIFEST.in +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/Makefile +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/.gitignore +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/img/comment-parts.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/img/example-docx-01.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/img/hdrftr-01.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_static/img/hdrftr-02.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_templates/layout.html +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_templates/sidebarlinks.html +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/LICENSE +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/layout.html +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/rtd-themes.conf +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/static/rtd.css_t +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/theme.conf +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/_themes/armstrong/theme.conf.orig +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/comments.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/dml.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/document.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/MsoColorType.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/MsoThemeColorIndex.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdAlignParagraph.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdBuiltinStyle.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdCellVerticalAlignment.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdColorIndex.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdLineSpacing.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdOrientation.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdRowAlignment.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdRowHeightRule.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdSectionStart.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdStyleType.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdTabAlignment.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdTabLeader.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdTableDirection.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/WdUnderline.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/enum/index.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/section.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/settings.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/shape.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/shared.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/style.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/table.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/api/text.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/conf.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/comments.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/coreprops.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/header.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/numbering.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/sections.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/settings.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/shapes/index.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/shapes/picture.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/shapes/shapes-inline-size.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/shapes/shapes-inline.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/character-style.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/index.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/latent-styles.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/paragraph-style.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/style.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/styles/styles.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/cell-merge.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/index.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/table-cell.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/table-props.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/table/table-row.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/breaks.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/font-color.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/font-highlight-color.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/font.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/hyperlink.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/index.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/paragraph-format.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/run-content.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/tab-stops.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/features/text/underline.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/index.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/schema/ct_body.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/schema/ct_document.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/dev/analysis/schema/ct_p.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/requirements.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/api-concepts.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/comments.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/custom-properties.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/hdrftr.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/install.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/quickstart.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/sections.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/shapes.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/styles-understanding.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/styles-using.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/tables.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/docs/user/text.rst +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/api-open-document.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/blk-add-paragraph.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/blk-add-table.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/blk-iter-inner-content.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/cmt-mutations.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/cmt-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-access-collections.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-access-sections.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-comment.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-heading.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-page-break.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-paragraph.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-picture.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-section.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-add-table.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-comments.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-coreprops.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-customprops.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-settings.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/doc-styles.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/environment.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/hdr-header-footer.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/hlk-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/img-characterize-image.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/num-access-numbering-part.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-access-inner-content.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-access-parfmt.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-add-run.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-alignment-prop.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-clear-paragraph.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-insert-paragraph.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-set-text.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/par-style-prop.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/pbk-split-para.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-access-font.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-access-inner-content.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-add-content.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-add-picture.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-char-style.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-clear-run.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/run-enum-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sct-section.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/shp-inline-shape-access.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/shp-inline-shape-size.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/api.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/block.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/comments.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/coreprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/customprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/document.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/font.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/hdrftr.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/helpers.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/hyperlink.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/image.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/numbering.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/pagebreak.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/paragraph.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/parfmt.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/section.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/settings.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/shape.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/shared.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/styles.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/table.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/tabstops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/blk-containing-table.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/blk-paras-and-tables.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/comments-rich-para.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/court-exif.jpg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-access-sections.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-add-section.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-coreprops.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-customprops-legacy.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-customprops.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-default.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-no-coreprops.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-no-customprops.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-odd-even-hdrs.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/doc-word-default-blank.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/fnt-color.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/hdr-header-footer.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/jfif-300-dpi.jpg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/jpeg420exif.jpg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/lena.bmp +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/lena.gif +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/lena.tif +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/lena_std.jpg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/monty-truth.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/mountain.bmp +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/num-having-numbering-part.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-alignment.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-hlink-frags.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-hyperlinks.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-known-paragraphs.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-known-styles.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/par-rendered-page-breaks.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/python-icon.jpeg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/run-char-style.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/run-enumerated-props.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sample.tif +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sct-first-page-hdrftr.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sct-inner-content.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sct-section-props.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/set-no-settings-part.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/shp-inline-shape-access.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sty-behav-props.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sty-having-no-styles-part.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sty-having-styles-part.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/sty-known-styles.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tab-stops.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-2x2-table.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-cell-access.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-cell-props.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-col-props.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-having-applied-style.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-having-tables.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-on-off-props.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/tbl-props.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/test.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/txt-font-highlight-color.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/test_files/txt-font-props.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/steps/text.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-access-font.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-access-latent-styles.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-access-parfmt.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-add-style.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-delete-style.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-latent-add-del.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-latent-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/sty-style-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tab-access-tabs.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tab-tabstop-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-add-row-or-col.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-cell-access.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-cell-add-table.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-cell-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-cell-text.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-col-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-item-access.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-merge-cells.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-row-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/tbl-style.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/txt-add-break.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/txt-font-color.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/txt-font-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/features/txt-parfmt-props.feature +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/requirements-dev.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/requirements-docs.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/requirements-test.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/requirements.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/setup.cfg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/blkcntnr.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/comments.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/dml/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/dml/color.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/drawing/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/base.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/dml.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/section.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/shape.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/style.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/table.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/enum/text.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/exceptions.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/bmp.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/exceptions.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/gif.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/helpers.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/image.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/jpeg.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/png.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/svg.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/image/tiff.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/constants.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/customprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/exceptions.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/oxml.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/package.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/packuri.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/parts/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/parts/coreprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/parts/customprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/phys_pkg.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/pkgreader.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/pkgwriter.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/shared.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/opc/spec.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/comments.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/coreprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/customprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/dml/CT_ExtensionList.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/document.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/drawing.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/exceptions.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/ns.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/numbering.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/parser.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/section.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/settings.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/shape.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/shared.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/simpletypes.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/styles.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/table.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/font.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/hyperlink.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/pagebreak.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/paragraph.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/parfmt.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/text/run.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/oxml/xmlchemy.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/package.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/comments.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/hdrftr.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/image.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/numbering.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/settings.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/story.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/parts/styles.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/py.typed +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/section.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/settings.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/shape.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/shared.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/styles/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/styles/latent.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/styles/style.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/styles/styles.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/table.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-comments.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/[Content_Types].xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/_rels/.rels +0 -0
- {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
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/customXml/item1.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/customXml/itemProps1.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/docProps/app.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/docProps/core.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/docProps/thumbnail.jpeg +0 -0
- {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
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/document.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/fontTable.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/numbering.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/settings.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/styles.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/stylesWithEffects.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/theme/theme1.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-docx-template/word/webSettings.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-footer.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-header.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-numbering.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-settings.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default-styles.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/templates/default.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/font.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/hyperlink.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/pagebreak.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/paragraph.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/parfmt.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/run.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/text/tabstops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/docx/types.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/python_docx_oss.egg-info/dependency_links.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/src/python_docx_oss.egg-info/top_level.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/conftest.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/dml/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/dml/test_color.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/customxml/generate_fixture.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/customxml/multiple-custom-xml-parts.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/documents/word-blank.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/drawing/word-floating-picture.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/fonts/word-east-asian-fonts.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/fixtures/images/word-svg-image.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_bmp.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_emf.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_gif.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_helpers.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_image.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_jpeg.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_png.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_svg.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/image/test_tiff.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/integration/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/integration/customxml/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/parts/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/parts/test_coreprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/parts/test_customprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_customprops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_oxml.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_package.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_packuri.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_phys_pkg.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_pkgreader.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/test_pkgwriter.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/unitdata/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/unitdata/rels.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/opc/unitdata/types.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/parts/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/parts/test_document.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/parts/unitdata/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/parts/unitdata/document.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_comments.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_document.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_ns.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_section.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_styles.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_table.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/test_xmlchemy.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/text/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/text/test_hyperlink.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/text/test_run.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/dml.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/numbering.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/section.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/shared.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/styles.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/table.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/oxml/unitdata/text.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_comments.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_customxml.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_document.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_hdrftr.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_image.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_numbering.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_settings.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_story.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/parts/test_styles.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/styles/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/styles/test_latent.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/styles/test_style.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/styles/test_styles.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_blkcntnr.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_comments.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_drawing.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_enum.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/150-dpi.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/300-dpi.TIF +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/300-dpi.jpg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/300-dpi.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/72-dpi.tiff +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/CVS_LOGO.WMF +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/blk-inner-content.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/exif-420-dpi.jpg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/[Content_Types].xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/_rels/.rels +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/customXml/_rels/item1.xml.rels +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/customXml/item1.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/customXml/itemProps1.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/docProps/app.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/docProps/core.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/docProps/thumbnail.jpeg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/_rels/document.xml.rels +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/document.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/fontTable.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/numbering.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/settings.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/styles.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/stylesWithEffects.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/theme/theme1.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/expanded_docx/word/webSettings.xml +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/having-images.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/jfif-iguana.jpg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/jpeg_without_app0_and_app1.jpg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/little-endian.tif +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/monty-truth.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/python-icon.jpeg +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/python-icon.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/python-powered.png +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/python.bmp +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/sct-inner-content.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/snippets/add-row-col.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/snippets/inline.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/snippets/new-tbl.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/snippets/tbl-cells.txt +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/sonic.emf +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/sonic.gif +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_files/test.docx +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_package.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_section.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_settings.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_shape.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_shared.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/test_table.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_font.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_hyperlink.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_pagebreak.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_paragraph.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_parfmt.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_run.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/text/test_tabstops.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitdata.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitutil/__init__.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitutil/cxml.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitutil/file.py +0 -0
- {python_docx_oss-0.1.1 → python_docx_oss-0.3.0}/tests/unitutil/mock.py +0 -0
- {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.
|
|
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>=
|
|
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
|
-
##
|
|
57
|
-
|
|
58
|
-
| Capability |
|
|
59
|
-
| --- | --- |
|
|
60
|
-
| Documents, paragraphs,
|
|
61
|
-
| Custom document properties |
|
|
62
|
-
| Custom XML
|
|
63
|
-
| SVG and EMF images |
|
|
64
|
-
| Inline and floating pictures |
|
|
65
|
-
|
|
|
66
|
-
| Low-level OPC parts and relationships |
|
|
67
|
-
|
|
|
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
|
-
##
|
|
28
|
-
|
|
29
|
-
| Capability |
|
|
30
|
-
| --- | --- |
|
|
31
|
-
| Documents, paragraphs,
|
|
32
|
-
| Custom document properties |
|
|
33
|
-
| Custom XML
|
|
34
|
-
| SVG and EMF images |
|
|
35
|
-
| Inline and floating pictures |
|
|
36
|
-
|
|
|
37
|
-
| Low-level OPC parts and relationships |
|
|
38
|
-
|
|
|
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
|
|
Binary file
|
|
@@ -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
|
|
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.
|
|
71
|
-
|
|
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>=
|
|
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>=
|
|
44
|
+
"pytest>=9.0.3",
|
|
45
45
|
"ruff>=0.11.13",
|
|
46
46
|
"sphinx-book-theme",
|
|
47
47
|
"tox>=4.26.0",
|
|
@@ -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
|
|
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 % (
|
|
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."""
|
|
@@ -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])
|