python-docx-oss 0.4.0__tar.gz → 0.5.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.4.0 → python_docx_oss-0.5.0}/HISTORY.md +17 -0
- {python_docx_oss-0.4.0/src/python_docx_oss.egg-info → python_docx_oss-0.5.0}/PKG-INFO +1 -1
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/inspection.rst +1 -1
- python_docx_oss-0.5.0/docs/user/inspection.rst +242 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/transformations.rst +2 -1
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/_scratch/test_out.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/__init__.py +12 -3
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/inspection/__init__.py +10 -3
- python_docx_oss-0.5.0/src/docx/inspection/_structural_xml_tags.py +1929 -0
- python_docx_oss-0.5.0/src/docx/inspection/features.py +110 -0
- python_docx_oss-0.5.0/src/docx/inspection/fingerprint.py +348 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/inspection/reader.py +67 -23
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/inspection/result.py +4 -7
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/transforms/hyperlinks.py +17 -8
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0/src/python_docx_oss.egg-info}/PKG-INFO +1 -1
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/python_docx_oss.egg-info/SOURCES.txt +1 -0
- python_docx_oss-0.5.0/tests/inspection/test_fingerprint.py +585 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/inspection/test_inspect.py +134 -132
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/transforms/test_normalize.py +54 -2
- python_docx_oss-0.4.0/docs/user/inspection.rst +0 -151
- python_docx_oss-0.4.0/src/docx/inspection/features.py +0 -157
- python_docx_oss-0.4.0/src/docx/inspection/fingerprint.py +0 -150
- python_docx_oss-0.4.0/tests/inspection/test_fingerprint.py +0 -190
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/LICENSE +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/MANIFEST.in +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/README.md +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/Makefile +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_static/.gitignore +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_static/img/comment-parts.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_static/img/example-docx-01.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_static/img/hdrftr-01.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_static/img/hdrftr-02.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_static/img/oss.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_templates/layout.html +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_templates/sidebarlinks.html +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_themes/armstrong/LICENSE +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_themes/armstrong/layout.html +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_themes/armstrong/rtd-themes.conf +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_themes/armstrong/static/rtd.css_t +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_themes/armstrong/theme.conf +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/_themes/armstrong/theme.conf.orig +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/comments.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/dml.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/document.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/MsoColorType.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/MsoThemeColorIndex.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdAlignParagraph.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdBuiltinStyle.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdCellVerticalAlignment.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdColorIndex.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdLineSpacing.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdOrientation.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdRowAlignment.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdRowHeightRule.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdSectionStart.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdStyleType.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdTabAlignment.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdTabLeader.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdTableDirection.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/WdUnderline.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/enum/index.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/sanitize.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/section.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/settings.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/shape.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/shared.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/style.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/table.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/text.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/api/transforms.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/conf.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/comments.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/coreprops.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/header.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/numbering.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/sections.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/settings.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/shapes/index.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/shapes/picture.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/shapes/shapes-inline-size.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/shapes/shapes-inline.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/styles/character-style.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/styles/index.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/styles/latent-styles.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/styles/paragraph-style.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/styles/style.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/styles/styles.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/table/cell-merge.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/table/index.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/table/table-cell.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/table/table-props.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/table/table-row.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/breaks.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/font-color.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/font-highlight-color.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/font.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/hyperlink.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/index.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/paragraph-format.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/run-content.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/tab-stops.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/features/text/underline.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/index.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/schema/ct_body.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/schema/ct_document.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/analysis/schema/ct_p.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/dev/upstream-maintenance.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/index.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/requirements.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/api-concepts.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/comments.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/compatibility.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/custom-properties.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/custom-xml.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/documents.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/hdrftr.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/install.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/quickstart.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/sanitization.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/sections.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/shapes.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/styles-understanding.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/styles-using.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/tables.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/docs/user/text.rst +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/api-open-document.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/blk-add-paragraph.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/blk-add-table.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/blk-iter-inner-content.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/cmt-mutations.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/cmt-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-access-collections.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-access-sections.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-add-comment.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-add-heading.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-add-page-break.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-add-paragraph.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-add-picture.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-add-section.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-add-table.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-comments.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-coreprops.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-customprops.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-settings.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/doc-styles.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/environment.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/hdr-header-footer.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/hlk-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/img-characterize-image.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/num-access-numbering-part.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/par-access-inner-content.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/par-access-parfmt.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/par-add-run.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/par-alignment-prop.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/par-clear-paragraph.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/par-insert-paragraph.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/par-set-text.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/par-style-prop.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/pbk-split-para.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/run-access-font.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/run-access-inner-content.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/run-add-content.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/run-add-picture.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/run-char-style.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/run-clear-run.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/run-enum-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sct-section.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/shp-inline-shape-access.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/shp-inline-shape-size.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/api.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/block.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/comments.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/coreprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/customprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/font.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/hdrftr.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/helpers.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/hyperlink.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/image.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/numbering.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/pagebreak.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/paragraph.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/parfmt.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/section.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/settings.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/shape.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/shared.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/styles.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/table.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/tabstops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/blk-containing-table.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/blk-paras-and-tables.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/comments-rich-para.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/court-exif.jpg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-access-sections.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-add-section.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-coreprops.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-customprops-legacy.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-customprops.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-default.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-no-coreprops.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-no-customprops.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-odd-even-hdrs.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/doc-word-default-blank.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/fnt-color.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/hdr-header-footer.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/jfif-300-dpi.jpg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/jpeg420exif.jpg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/lena.bmp +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/lena.gif +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/lena.tif +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/lena_std.jpg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/monty-truth.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/mountain.bmp +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/num-having-numbering-part.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/par-alignment.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/par-hlink-frags.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/par-hyperlinks.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/par-known-paragraphs.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/par-known-styles.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/par-rendered-page-breaks.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/python-icon.jpeg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/run-char-style.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/run-enumerated-props.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/sample.tif +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/sct-first-page-hdrftr.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/sct-inner-content.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/sct-section-props.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/set-no-settings-part.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/shp-inline-shape-access.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/sty-behav-props.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/sty-having-no-styles-part.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/sty-having-styles-part.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/sty-known-styles.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tab-stops.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tbl-2x2-table.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tbl-cell-access.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tbl-cell-props.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tbl-col-props.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tbl-having-applied-style.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tbl-having-tables.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tbl-on-off-props.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/tbl-props.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/test.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/txt-font-highlight-color.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/test_files/txt-font-props.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/steps/text.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sty-access-font.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sty-access-latent-styles.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sty-access-parfmt.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sty-add-style.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sty-delete-style.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sty-latent-add-del.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sty-latent-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/sty-style-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tab-access-tabs.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tab-tabstop-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-add-row-or-col.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-cell-access.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-cell-add-table.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-cell-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-cell-text.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-col-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-item-access.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-merge-cells.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-row-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/tbl-style.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/txt-add-break.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/txt-font-color.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/txt-font-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/features/txt-parfmt-props.feature +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/pyproject.toml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/requirements-dev.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/requirements-docs.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/requirements-test.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/requirements.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/setup.cfg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/api.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/blkcntnr.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/comments.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/dml/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/dml/color.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/drawing/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/enum/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/enum/base.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/enum/dml.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/enum/section.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/enum/shape.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/enum/style.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/enum/table.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/enum/text.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/exceptions.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/bmp.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/constants.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/emf.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/exceptions.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/gif.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/helpers.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/image.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/jpeg.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/png.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/svg.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/image/tiff.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/inspection/source.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/constants.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/coreprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/customprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/exceptions.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/oxml.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/package.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/packuri.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/part.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/parts/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/parts/coreprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/parts/customprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/phys_pkg.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/pkgreader.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/pkgwriter.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/rel.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/shared.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/opc/spec.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/comments.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/coreprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/customprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/dml/CT_ExtensionList.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/drawing.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/exceptions.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/ns.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/numbering.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/parser.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/section.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/settings.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/shape.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/shared.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/simpletypes.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/styles.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/table.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/text/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/text/font.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/text/hyperlink.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/text/pagebreak.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/text/paragraph.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/text/parfmt.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/text/run.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/oxml/xmlchemy.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/package.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/comments.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/customxml.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/hdrftr.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/image.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/numbering.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/settings.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/story.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/parts/styles.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/py.typed +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/sanitize/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/sanitize/cleaner.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/sanitize/result.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/section.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/settings.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/shape.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/shared.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/styles/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/styles/latent.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/styles/style.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/styles/styles.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/table.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-comments.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/[Content_Types].xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/_rels/.rels +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/customXml/_rels/item1.xml.rels +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/customXml/item1.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/customXml/itemProps1.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/docProps/app.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/docProps/core.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/docProps/thumbnail.jpeg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/_rels/document.xml.rels +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/document.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/fontTable.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/numbering.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/settings.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/styles.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/stylesWithEffects.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/theme/theme1.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-docx-template/word/webSettings.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-footer.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-header.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-numbering.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-settings.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default-styles.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/templates/default.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/text/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/text/font.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/text/hyperlink.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/text/pagebreak.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/text/paragraph.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/text/parfmt.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/text/run.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/text/tabstops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/transforms/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/transforms/normalize.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/transforms/package.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/transforms/repair.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/transforms/result.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/docx/types.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/python_docx_oss.egg-info/dependency_links.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/python_docx_oss.egg-info/requires.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/src/python_docx_oss.egg-info/top_level.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/conftest.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/dml/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/dml/test_color.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/fixtures/README.md +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/fixtures/comments/word-comments-rich.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/fixtures/customxml/generate_fixture.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/fixtures/customxml/multiple-custom-xml-parts.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/fixtures/documents/word-blank.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/fixtures/drawing/word-floating-picture.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/fixtures/fonts/word-east-asian-fonts.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/fixtures/images/word-svg-image.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_bmp.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_emf.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_gif.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_helpers.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_image.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_jpeg.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_png.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_svg.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/image/test_tiff.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/inspection/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/inspection/helpers.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/integration/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/integration/customxml/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/integration/customxml/test_custom_xml_roundtrip.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/integration/test_word_roundtrip.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/parts/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/parts/test_coreprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/parts/test_customprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_coreprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_customprops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_oxml.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_package.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_packuri.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_part.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_phys_pkg.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_pkgreader.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_pkgwriter.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/test_rel.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/unitdata/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/unitdata/rels.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/opc/unitdata/types.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/parts/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/parts/test_document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/parts/unitdata/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/parts/unitdata/document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/test__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/test_comments.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/test_document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/test_ns.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/test_section.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/test_styles.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/test_table.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/test_xmlchemy.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/text/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/text/test_hyperlink.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/text/test_run.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/unitdata/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/unitdata/dml.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/unitdata/numbering.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/unitdata/section.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/unitdata/shared.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/unitdata/styles.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/unitdata/table.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/oxml/unitdata/text.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_comments.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_customxml.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_hdrftr.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_image.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_numbering.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_settings.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_story.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/parts/test_styles.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/styles/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/styles/test_latent.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/styles/test_style.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/styles/test_styles.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_api.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_blkcntnr.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_comments.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_document.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_drawing.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_enum.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/150-dpi.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/300-dpi.TIF +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/300-dpi.jpg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/300-dpi.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/72-dpi.tiff +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/CVS_LOGO.WMF +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/blk-inner-content.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/exif-420-dpi.jpg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/[Content_Types].xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/_rels/.rels +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/customXml/_rels/item1.xml.rels +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/customXml/item1.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/customXml/itemProps1.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/docProps/app.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/docProps/core.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/docProps/thumbnail.jpeg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/_rels/document.xml.rels +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/document.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/fontTable.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/numbering.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/settings.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/styles.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/stylesWithEffects.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/theme/theme1.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/expanded_docx/word/webSettings.xml +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/having-images.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/jfif-iguana.jpg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/jpeg_without_app0_and_app1.jpg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/little-endian.tif +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/monty-truth.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/python-icon.jpeg +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/python-icon.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/python-powered.png +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/python.bmp +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/sct-inner-content.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/snippets/add-row-col.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/snippets/inline.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/snippets/new-tbl.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/snippets/tbl-cells.txt +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/sonic.emf +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/sonic.gif +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_files/test.docx +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_package.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_sanitize.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_section.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_settings.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_shape.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_shared.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/test_table.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/text/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/text/test_font.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/text/test_hyperlink.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/text/test_pagebreak.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/text/test_paragraph.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/text/test_parfmt.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/text/test_run.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/text/test_tabstops.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/transforms/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/transforms/helpers.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/transforms/test_repair.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/unitdata.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/unitutil/__init__.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/unitutil/cxml.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/unitutil/file.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tests/unitutil/mock.py +0 -0
- {python_docx_oss-0.4.0 → python_docx_oss-0.5.0}/tox.ini +0 -0
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
## Release History
|
|
2
2
|
|
|
3
|
+
**0.5.0 (2026-11-02)**
|
|
4
|
+
|
|
5
|
+
- Rejected DTDs and entity expansion in XML tree serialization.
|
|
6
|
+
- Distinguished complete scans from clean inspection reports.
|
|
7
|
+
- Kept complex-field detection within its paragraph, including text boxes.
|
|
8
|
+
- Ignored indentation in schema-derived Word and DrawingML structures (fingerprint v3).
|
|
9
|
+
- Added a callback to exclude package parts or XML subtrees from fingerprints.
|
|
10
|
+
- Added a per-part normalization callback and a reusable XML tree serializer.
|
|
11
|
+
- Preserved following text when excluding elements with the XML tree serializer.
|
|
12
|
+
- Preserved XML namespace declarations when fingerprinting, including namespace
|
|
13
|
+
references in attribute values.
|
|
14
|
+
- Ignored formatting whitespace in known Word structural XML elements by default
|
|
15
|
+
when fingerprinting, preserving text and allowing exact structural whitespace comparison.
|
|
16
|
+
- Fixed hyperlink field conversion when proofing markers appear in the result.
|
|
17
|
+
- Added streaming story queries with caller-defined predicates and optional early exit.
|
|
18
|
+
- Replaced the fixed hyperlink feature fields with general-purpose scan events.
|
|
19
|
+
|
|
3
20
|
**0.4.0 (2026-10-29)**
|
|
4
21
|
|
|
5
22
|
- Added explicit, transactional empty Custom XML repair and conservative hyperlink
|
|
@@ -5,7 +5,7 @@ Package inspection and fingerprinting
|
|
|
5
5
|
|
|
6
6
|
.. automodule:: docx.inspection
|
|
7
7
|
:members: inspect, fingerprint, FingerprintPolicy, PackageInspection,
|
|
8
|
-
PackageInventory, PartInventory, RelationshipInventory, Finding,
|
|
8
|
+
PackageInventory, PartInventory, RelationshipInventory, Finding, ScanEvent
|
|
9
9
|
|
|
10
10
|
See :ref:`package_inspection` for finding codes, exclusions, scan scope, and
|
|
11
11
|
resource guarantees.
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
.. _package_inspection:
|
|
2
|
+
|
|
3
|
+
Inspecting packages and comparing content
|
|
4
|
+
================================================
|
|
5
|
+
|
|
6
|
+
``inspect()`` observes a DOCX before it can be opened as a ``Document``. It does
|
|
7
|
+
not repair or rewrite the input. Both inspection and fingerprinting accept a
|
|
8
|
+
filesystem path (including ``pathlib.Path``), raw bytes, or a binary stream::
|
|
9
|
+
|
|
10
|
+
from docx import inspect
|
|
11
|
+
|
|
12
|
+
report = inspect("input.docx")
|
|
13
|
+
for finding in report.findings:
|
|
14
|
+
print(finding.code, finding.partname, finding.target)
|
|
15
|
+
|
|
16
|
+
The report contains an immutable package inventory and structured findings.
|
|
17
|
+
|
|
18
|
+
To search Word story XML, provide a predicate that receives read-only events::
|
|
19
|
+
|
|
20
|
+
def find_bookmark(event):
|
|
21
|
+
return event.kind == "start" and event.tag.endswith("}bookmarkStart")
|
|
22
|
+
|
|
23
|
+
report = inspect("input.docx", predicate=find_bookmark, stop_on_match=True)
|
|
24
|
+
if report.findings:
|
|
25
|
+
print("The scanned package is damaged")
|
|
26
|
+
elif report.matched:
|
|
27
|
+
print("Bookmark found")
|
|
28
|
+
|
|
29
|
+
A predicate selects query scope: the main document and reachable headers,
|
|
30
|
+
footers, footnotes, endnotes, and comments. Query reports have empty inventory
|
|
31
|
+
and ``scope == "query"``. Without a predicate, inspection retains full scope
|
|
32
|
+
and inventory. The predicate runs on immutable ``ScanEvent`` objects with
|
|
33
|
+
``partname``, ``kind`` (start/end/text), expanded ``tag``, ``attributes`` on
|
|
34
|
+
start events, and ``text`` on text events. Text may be delivered in multiple
|
|
35
|
+
chunks. A stateful callable may track element nesting and split text.
|
|
36
|
+
|
|
37
|
+
The default scans the full query scope even after a match; ``stop_on_match=True``
|
|
38
|
+
stops at the first match and sets ``scan_complete=False``. Findings report only
|
|
39
|
+
scanned content; neither an early match nor a query with no findings proves the
|
|
40
|
+
whole package is valid. Predicate exceptions propagate. The source stream is
|
|
41
|
+
never handed to the predicate.
|
|
42
|
+
|
|
43
|
+
``scan_complete`` describes whether the selected scope was scanned successfully,
|
|
44
|
+
not whether the package is clean. Findings such as a missing relationship target
|
|
45
|
+
can coexist with a complete scan. Empty XML parts cannot be parsed as XML and,
|
|
46
|
+
like unreadable or unparseable parts, make the scan incomplete. Early stops also
|
|
47
|
+
make the scan incomplete. A query is incomplete if a reachable story is missing.
|
|
48
|
+
|
|
49
|
+
Names are package-relative without a leading slash. The relationship source
|
|
50
|
+
``/`` denotes the package root. Internal target paths are resolved relative to
|
|
51
|
+
their source, with URI percent escapes decoded. Reachability does not imply
|
|
52
|
+
that a part is well-formed or safe to open.
|
|
53
|
+
|
|
54
|
+
Findings
|
|
55
|
+
--------
|
|
56
|
+
|
|
57
|
+
Use ``report.has_finding(code)`` or ``report.findings_by_code(code)`` rather than
|
|
58
|
+
matching human-readable exception messages. Findings carry the affected member
|
|
59
|
+
name when one is available, and missing-target findings carry ``target``.
|
|
60
|
+
|
|
61
|
+
.. list-table::
|
|
62
|
+
:header-rows: 1
|
|
63
|
+
:widths: 35 65
|
|
64
|
+
|
|
65
|
+
* - Code
|
|
66
|
+
- Meaning
|
|
67
|
+
* - ``not_a_package``
|
|
68
|
+
- An opened source cannot be read as a ZIP package.
|
|
69
|
+
* - ``missing_content_types``
|
|
70
|
+
- The package has no ``[Content_Types].xml`` member.
|
|
71
|
+
* - ``missing_main_document``
|
|
72
|
+
- No package-root officeDocument relationship resolves to an existing part.
|
|
73
|
+
* - ``invalid_content_types``
|
|
74
|
+
- The Content-Types member has an unexpected root element.
|
|
75
|
+
* - ``invalid_relationships``
|
|
76
|
+
- A relationship member has an unexpected root, missing required attributes,
|
|
77
|
+
duplicate IDs, or an invalid target URI.
|
|
78
|
+
* - ``empty_xml_part``
|
|
79
|
+
- An XML member has zero bytes or contains only XML whitespace.
|
|
80
|
+
* - ``unparseable_xml_part``
|
|
81
|
+
- XML is malformed or uses a DTD, which this API rejects.
|
|
82
|
+
* - ``missing_relationship_target``
|
|
83
|
+
- An internal relationship points to an absent member.
|
|
84
|
+
* - ``unreadable_part``
|
|
85
|
+
- An XML member cannot be decompressed or fails its ZIP integrity check.
|
|
86
|
+
* - ``duplicate_member``
|
|
87
|
+
- The ZIP contains the same member name more than once; inventory uses the first.
|
|
88
|
+
* - ``unsafe_member_name``
|
|
89
|
+
- A ZIP member has an absolute name, backslash, or parent-directory component.
|
|
90
|
+
|
|
91
|
+
All recognizable XML parts are checked, including unreachable XML. A broken
|
|
92
|
+
relationship part does not prevent other parts from being inventoried. Findings
|
|
93
|
+
are observations, not a complete OPC/schema/security validation; an empty list
|
|
94
|
+
does not guarantee that ``Document()`` or Microsoft Word can open the input.
|
|
95
|
+
Invalid source argument types raise ``TypeError``. Source opening failures, such
|
|
96
|
+
as ``FileNotFoundError`` or ``PermissionError``, propagate to the caller rather
|
|
97
|
+
than being classified as package damage. This matches ``repair()`` and ``normalize()``.
|
|
98
|
+
|
|
99
|
+
Story scanning and resource use
|
|
100
|
+
--------------------------------------
|
|
101
|
+
|
|
102
|
+
The query scans all reachable Word story parts, including Transitional and Strict
|
|
103
|
+
Word namespaces. No built-in hyperlink-specific feature is assumed.
|
|
104
|
+
|
|
105
|
+
Inspection reads XML incrementally without building an element tree. Media,
|
|
106
|
+
embedded objects, and other binary member payloads are never opened. Memory use
|
|
107
|
+
scales with package inventory and XML/field nesting depth, rather than story text or
|
|
108
|
+
media size. Metadata lists still scale with the number of parts and relationships.
|
|
109
|
+
Binary payload checksums are therefore not validated by inspection.
|
|
110
|
+
|
|
111
|
+
Seekable streams are read from the beginning, then restored to their original
|
|
112
|
+
position on success or failure. Caller-owned streams are never closed. A
|
|
113
|
+
forward-only stream is consumed and spooled, spilling to a temporary file beyond
|
|
114
|
+
1 MiB. Paths and temporary handles are closed internally.
|
|
115
|
+
|
|
116
|
+
Content fingerprints
|
|
117
|
+
--------------------
|
|
118
|
+
|
|
119
|
+
``fingerprint()`` computes a versioned SHA-256 package-content fingerprint::
|
|
120
|
+
|
|
121
|
+
from docx import FingerprintPolicy, fingerprint
|
|
122
|
+
|
|
123
|
+
unchanged = fingerprint(before_bytes) == fingerprint(after_bytes)
|
|
124
|
+
|
|
125
|
+
policy = FingerprintPolicy(exclude_parts=("docProps/*",))
|
|
126
|
+
unchanged_except_properties = (
|
|
127
|
+
fingerprint(before_bytes, policy=policy)
|
|
128
|
+
== fingerprint(after_bytes, policy=policy)
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
Member ordering, compression, ZIP timestamps, directory entries, and other ZIP
|
|
132
|
+
metadata do not affect the fingerprint. Member names and contents do. XML uses
|
|
133
|
+
C14N 2.0 with comments, which normalizes attribute ordering, quote style, and
|
|
134
|
+
empty-element spelling. By default, whitespace-only text directly inside known
|
|
135
|
+
element-only Word, DrawingML, MCE, and WordprocessingShape structures is ignored.
|
|
136
|
+
This includes whitespace between extension children of a known structure. Text
|
|
137
|
+
elements, unknown or unverified extension elements, generic Custom XML parts, and
|
|
138
|
+
elements under ``xml:space="preserve"`` retain whitespace. An explicit
|
|
139
|
+
``xml:space="default"`` resets inherited preservation. Elements with an
|
|
140
|
+
``xsi:type`` override are preserved conservatively. Set ``ignore_structural_whitespace=False`` on the policy
|
|
141
|
+
to retain structural whitespace. Namespace prefixes and declarations are preserved,
|
|
142
|
+
including declarations referenced only from attribute values. This rule applies
|
|
143
|
+
only to parts declared with a known WordprocessingML or DrawingML theme content
|
|
144
|
+
type, and to specific structural elements within them. The generated name list
|
|
145
|
+
comes from ECMA-376 fifth-edition Transitional and Strict schemas, ECMA-376 Part 3
|
|
146
|
+
MCE structures, and Microsoft's MS-ODRAWXML WordprocessingShape schema. It excludes
|
|
147
|
+
ambiguous element names, VML, and unverified extensions. The document is not schema
|
|
148
|
+
validated; this rule assumes the known elements follow their element-only or empty
|
|
149
|
+
content model. Use ``normalize`` for broader application-specific comparison.
|
|
150
|
+
Raw XML hashing with
|
|
151
|
+
``canonicalize_xml=False`` always preserves the original bytes.
|
|
152
|
+
This is not a semantic Word comparison: equivalent rendering can produce
|
|
153
|
+
different fingerprints. Compare fingerprints with the same policy and API
|
|
154
|
+
algorithm version; the digest is not compatible with arbitrary existing hashes.
|
|
155
|
+
The expanded structural-whitespace rules use fingerprint algorithm version 3, so
|
|
156
|
+
digest strings differ from earlier versions even when whitespace handling is disabled.
|
|
157
|
+
|
|
158
|
+
The optional ``normalize`` callback can replace the bytes hashed for a part::
|
|
159
|
+
|
|
160
|
+
from docx import FingerprintItem, FingerprintPolicy, serialize_xml
|
|
161
|
+
from lxml import etree
|
|
162
|
+
|
|
163
|
+
def normalize(item: FingerprintItem, read_bytes):
|
|
164
|
+
if not item.part_name.endswith(".xml"):
|
|
165
|
+
return "raw"
|
|
166
|
+
content = read_bytes()
|
|
167
|
+
try:
|
|
168
|
+
return serialize_xml(content, part_name=item.part_name)
|
|
169
|
+
except etree.XMLSyntaxError:
|
|
170
|
+
return content
|
|
171
|
+
|
|
172
|
+
policy = FingerprintPolicy(normalize=normalize)
|
|
173
|
+
|
|
174
|
+
The callback receives a part item and an on-demand reader. Return bytes to hash
|
|
175
|
+
those bytes directly, ``"raw"`` to hash the original part incrementally, or
|
|
176
|
+
``None`` to use the default processing. ``read_bytes()`` returns the original
|
|
177
|
+
bytes, can be called repeatedly, and materializes that part in memory only when
|
|
178
|
+
called. Errors propagate. The callback must produce deterministic results.
|
|
179
|
+
Part exclusions run first. For bytes or raw results, the callback is responsible
|
|
180
|
+
for any element-level exclusions; default XML canonicalization and element
|
|
181
|
+
exclusion callbacks are bypassed. When every included part is handled by the
|
|
182
|
+
callback, Content Types need not be read for classification. Otherwise the
|
|
183
|
+
Content Types member is still read to classify parts using default processing.
|
|
184
|
+
|
|
185
|
+
``serialize_xml()`` is a tree-based helper: it removes blank text using lxml,
|
|
186
|
+
optionally excludes XML elements with the same predicate as ``exclude``, and
|
|
187
|
+
returns serialized bytes. It preserves attribute order, requires memory
|
|
188
|
+
proportional to the XML part, and preserves text following an excluded element
|
|
189
|
+
that remains after lxml's blank-text removal.
|
|
190
|
+
Its blank-text treatment is broader
|
|
191
|
+
than the default structural-whitespace rule; use it only when appropriate.
|
|
192
|
+
|
|
193
|
+
The default includes document properties, Custom XML, relationships, and binary
|
|
194
|
+
content. ``FingerprintPolicy`` can explicitly exclude:
|
|
195
|
+
|
|
196
|
+
* ``exclude_parts``: shell-style patterns against member names; ``*`` also
|
|
197
|
+
matches ``/``;
|
|
198
|
+
* ``exclude_relationship_types``: complete relationship Type URIs;
|
|
199
|
+
* ``exclude_xml_tags``: expanded XML names, removing entire subtrees;
|
|
200
|
+
* ``exclude_xml_attributes``: expanded XML attribute names.
|
|
201
|
+
* ``exclude``: a predicate for package parts and XML elements.
|
|
202
|
+
|
|
203
|
+
The predicate receives a read-only ``FingerprintItem``. Its ``kind`` is ``part``
|
|
204
|
+
or ``xml_element``; ``part_name`` is the package-relative member name. XML
|
|
205
|
+
elements also expose expanded-name ``tag`` and ``attributes``, ``ancestors``
|
|
206
|
+
(root first), and ``parent_tag`` (or ``None`` for a root). For example::
|
|
207
|
+
|
|
208
|
+
from docx import FingerprintItem, FingerprintPolicy
|
|
209
|
+
|
|
210
|
+
def exclude(item: FingerprintItem) -> bool:
|
|
211
|
+
if item.kind == "part":
|
|
212
|
+
return item.part_name.startswith("docProps/")
|
|
213
|
+
return item.tag == "{urn:example}color" and item.parent_tag == "{urn:example}properties"
|
|
214
|
+
|
|
215
|
+
policy = FingerprintPolicy(exclude=exclude)
|
|
216
|
+
|
|
217
|
+
Returning true excludes the part or the element and its entire subtree; excluded
|
|
218
|
+
subtrees are not visited. Exclusions combine with the other policy settings: any
|
|
219
|
+
matching rule excludes the item. XML element callbacks run only when XML
|
|
220
|
+
canonicalization is enabled. Part callbacks run even with raw XML hashing.
|
|
221
|
+
Content Types are read for default XML classification even when excluded. The
|
|
222
|
+
predicate must be deterministic and equivalent for both fingerprints being
|
|
223
|
+
compared; its exceptions propagate to the caller.
|
|
224
|
+
|
|
225
|
+
For example, ``exclude_xml_tags=("{namespace-uri}element",)`` applies to that
|
|
226
|
+
element throughout the package. Excluding a member does not automatically
|
|
227
|
+
exclude relationships or Content-Type declarations that reference it.
|
|
228
|
+
Relationship exclusions do not remove their target parts. Applications must
|
|
229
|
+
choose the complete policy appropriate to their comparison.
|
|
230
|
+
|
|
231
|
+
When default XML processing is used, ``[Content_Types].xml`` is read for
|
|
232
|
+
XML classification, even if excluded from the digest. XML parts with nonstandard
|
|
233
|
+
extensions therefore retain the same comparison rules. A malformed or empty
|
|
234
|
+
Content-Types member raises a member-specific ``ValueError`` even when excluded.
|
|
235
|
+
|
|
236
|
+
Set ``canonicalize_xml=False`` to hash XML bytes exactly. XML exclusions cannot
|
|
237
|
+
be combined with that mode. Unlike ``inspect()``, fingerprinting raises on
|
|
238
|
+
unreadable packages or malformed included XML rather than returning a partial
|
|
239
|
+
digest. Duplicate member names are rejected. DTDs are rejected when XML is
|
|
240
|
+
canonicalized. Binary and XML contents are processed incrementally; the function
|
|
241
|
+
does not collect all member payloads in memory. Stream guarantees match
|
|
242
|
+
``inspect()``.
|
|
@@ -81,7 +81,8 @@ Hyperlink normalization
|
|
|
81
81
|
``hyperlink_fields=True`` converts supported ``HYPERLINK`` fields into standard
|
|
82
82
|
``w:hyperlink`` elements. It handles simple fields and paragraph-local complex
|
|
83
83
|
fields with separate begin, instruction, separator, result, and end runs. Field
|
|
84
|
-
instructions may span runs. Result runs retain their text and formatting
|
|
84
|
+
instructions may span runs. Result runs retain their text and formatting; proofing
|
|
85
|
+
markers within the result remain in their original order.
|
|
85
86
|
|
|
86
87
|
Supported targets include quoted or unquoted addresses, bookmark-only links,
|
|
87
88
|
and address plus bookmark. Supported switches are ``\l`` (anchor), ``\o``
|
|
Binary file
|
|
@@ -9,16 +9,25 @@ from __future__ import annotations
|
|
|
9
9
|
from typing import TYPE_CHECKING, Type
|
|
10
10
|
|
|
11
11
|
from docx.api import Document
|
|
12
|
-
from docx.inspection import FingerprintPolicy, fingerprint, inspect
|
|
12
|
+
from docx.inspection import FingerprintItem, FingerprintPolicy, fingerprint, inspect, serialize_xml
|
|
13
13
|
from docx.transforms import normalize, repair
|
|
14
14
|
|
|
15
15
|
if TYPE_CHECKING:
|
|
16
16
|
from docx.opc.part import Part
|
|
17
17
|
|
|
18
|
-
__version__ = "0.
|
|
18
|
+
__version__ = "0.5.0"
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
__all__ = [
|
|
21
|
+
__all__ = [
|
|
22
|
+
"Document",
|
|
23
|
+
"FingerprintItem",
|
|
24
|
+
"FingerprintPolicy",
|
|
25
|
+
"fingerprint",
|
|
26
|
+
"inspect",
|
|
27
|
+
"normalize",
|
|
28
|
+
"repair",
|
|
29
|
+
"serialize_xml",
|
|
30
|
+
]
|
|
22
31
|
|
|
23
32
|
|
|
24
33
|
# -- register custom Part classes with opc package reader --
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"""Read-only package inspection and configurable content fingerprints."""
|
|
2
2
|
|
|
3
|
-
from docx.inspection.
|
|
3
|
+
from docx.inspection.features import ScanEvent
|
|
4
|
+
from docx.inspection.fingerprint import (
|
|
5
|
+
FingerprintItem,
|
|
6
|
+
FingerprintPolicy,
|
|
7
|
+
fingerprint,
|
|
8
|
+
serialize_xml,
|
|
9
|
+
)
|
|
4
10
|
from docx.inspection.reader import inspect
|
|
5
11
|
from docx.inspection.result import (
|
|
6
|
-
Features,
|
|
7
12
|
Finding,
|
|
8
13
|
PackageInspection,
|
|
9
14
|
PackageInventory,
|
|
@@ -12,13 +17,15 @@ from docx.inspection.result import (
|
|
|
12
17
|
)
|
|
13
18
|
|
|
14
19
|
__all__ = [
|
|
15
|
-
"
|
|
20
|
+
"ScanEvent",
|
|
16
21
|
"Finding",
|
|
22
|
+
"FingerprintItem",
|
|
17
23
|
"FingerprintPolicy",
|
|
18
24
|
"PackageInspection",
|
|
19
25
|
"PackageInventory",
|
|
20
26
|
"PartInventory",
|
|
21
27
|
"RelationshipInventory",
|
|
22
28
|
"fingerprint",
|
|
29
|
+
"serialize_xml",
|
|
23
30
|
"inspect",
|
|
24
31
|
]
|