python-pptx2 2.14.0__tar.gz → 2.16.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_pptx2-2.14.0 → python_pptx2-2.16.0}/HISTORY.rst +126 -0
- {python_pptx2-2.14.0/src/python_pptx2.egg-info → python_pptx2-2.16.0}/PKG-INFO +1 -1
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/table.py +41 -1
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/tbl-table.feature +28 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/__init__.py +4 -1
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_slide_importer.py +35 -21
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/api.py +11 -5
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/audit.py +14 -2
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/data.py +17 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/plot.py +19 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/xmlwriter.py +11 -2
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/text.py +72 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/package.py +12 -11
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/serialized.py +23 -14
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/__init__.py +6 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/plot.py +13 -0
- python_pptx2-2.16.0/src/pptx2/oxml/customprops.py +170 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/ns.py +2 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/presentation.py +47 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/simpletypes.py +12 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/slide.py +66 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/text.py +33 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/package.py +14 -2
- python_pptx2-2.16.0/src/pptx2/parts/customprops.py +129 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/image.py +7 -5
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/presentation.py +21 -6
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/slide.py +68 -1
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/presentation.py +15 -2
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/shapetree.py +45 -4
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/basics.md +30 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/charts.md +1 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/lint.md +9 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/tables.md +10 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/slide.py +104 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/table.py +193 -1
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/text/text.py +134 -3
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/util.py +3 -5
- {python_pptx2-2.14.0 → python_pptx2-2.16.0/src/python_pptx2.egg-info}/PKG-INFO +1 -1
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/SOURCES.txt +5 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_chart_toggles.py +17 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_data.py +18 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_plot.py +47 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_xmlwriter.py +6 -0
- python_pptx2-2.16.0/tests/integration/test_add_slide_layout.py +216 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/test_round_trip.py +80 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/test_package.py +9 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/test_serialized.py +23 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_presentation.py +47 -1
- python_pptx2-2.16.0/tests/oxml/test_slide.py +66 -0
- python_pptx2-2.16.0/tests/parts/test_customprops.py +274 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_image.py +34 -1
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_presentation.py +17 -5
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_slide.py +89 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/schema/oxml_schema_validator.py +69 -2
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/schema/test_schema_validity.py +146 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_shapetree.py +87 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_api.py +34 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_audit.py +24 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/minimal_slide.xml +1 -1
- python_pptx2-2.16.0/tests/test_pathlike_inputs.py +178 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_slide.py +188 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_table.py +457 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_util.py +35 -1
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/text/test_text.py +204 -2
- python_pptx2-2.14.0/tests/oxml/test_slide.py +0 -23
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/LICENSE +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/MANIFEST.in +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/README.rst +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/act-action.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/act-hyperlink.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-axis-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-axistitle-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-category-access.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-category-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-chart.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-charttitle-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-data-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-datalabels.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-gridlines-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-legend-access.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-legend-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-marker-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-plot-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-point-access.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-point-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-replace-data.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-series.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-ticklabels-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/dml-color.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/dml-effect.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/dml-fill.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/dml-line.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/environment.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/ph-inherit-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/ph-insert-shape.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/ph-phfmt-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/ph-placeholder-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/prs-coreprops.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/prs-default-template.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/prs-open-save.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/prs-presentation-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-autoshape.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-connector.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-freeform.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-graphicframe.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-groupshape.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-movie-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-picture.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-placeholder.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-shapes.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-shared.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/sld-background.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/sld-slide.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/sld-slides.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/action.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/axis.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/background.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/category.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/chart.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/chartdata.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/color.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/coreprops.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/datalabel.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/effect.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/fill.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/font.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/font_color.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/helpers.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/legend.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/line.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/picture.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/placeholder.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/plot.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/presentation.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/series.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/shape.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/shapes.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/slide.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/slides.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/72-dpi.tiff +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/act-props.pptm +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/calibriz.ttf +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-category-access.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-charts.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-legend.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-point-access.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-point-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-series.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/dml-effect.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/dml-fill.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/dml-line.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/ext-rels.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/font-color.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/just-two-mice.png +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/minimal.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/monty-truth.png +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/mst-shapes.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/pic.emf +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/prs-notes.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/prs-properties.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/python-icon.jpeg +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/python-powered.png +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/python.bmp +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-common-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-freeform.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-picture.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-shapes.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-background.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-blank.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-notes.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-slide.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-slides.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sonic.gif +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/tbl-cell.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/test.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-font-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-text.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/text.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/text_frame.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/tbl-cell.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/tbl-column.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-fit-text.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-font-color.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-font-props.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-paragraph.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-text.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-textframe.feature +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/pyproject.toml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/setup.cfg +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_color.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_svg.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_template_applier.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_textstyle.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/accessibility.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/action.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/animation.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/analytics.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/axis.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/category.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/chart.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/datalabel.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/legend.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/marker.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/palettes.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/point.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/quick_layouts.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/series.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/xlsx.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/compose/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/compose/from_spec.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/components.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/figures.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/layout.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/recipes.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/style.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/tokens.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/diagrams.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/chtfmt.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/color.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/effect.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/fill.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/line.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/picture.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/three_d.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/action.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/animation.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/base.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/chart.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/dml.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/lang.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/presentation.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/shapes.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/exc.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/formats.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/geometry.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/inherit.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/lint.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/math.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/mathml2omml.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/media.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/constants.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/oxml.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/packuri.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/shared.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/spec.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/action.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/axis.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/chart.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/legend.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/marker.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/series.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/shared.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/coreprops.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/color.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/effect.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/fill.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/line.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/three_d.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/connector.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/picture.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/shared.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/table.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/theme.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/xmlchemy.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/chart.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/coreprops.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/diagram.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/embeddedpackage.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/media.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/py.typed +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/render.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/section.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/autoshape.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/base.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/connector.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/freeform.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/graphfrm.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/group.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/picture.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/placeholder.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shared.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/SKILL.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/__main__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/animations.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/compose.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/design.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/effects.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/math.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/picture-effects.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/render.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/smart-art.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/theme.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/three-d.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/transitions.md +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/smart_art.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/spec.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/table_styles.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/default.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/docx-icon.emf +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/generic-icon.emf +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/notes.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/notesMaster.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/pptx-icon.emf +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/theme.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/text/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/text/fonts.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/text/layout.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/theme.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/types.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/entry_points.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/requires.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/top_level.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_analytics.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_axis.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_category.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_chart.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_collision_strategy.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_datalabel.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_legend.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_marker.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_palettes.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_point.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_quick_layouts.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_series.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_xlsx.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_components.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_figures.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_layout.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_recipes.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_style.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_tokens.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_chtfmt.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_color.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_effect.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_fill.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_line.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_three_d.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/enum/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/enum/test_base.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/enum/test_shapes.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/round_trip.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/test_apply_template.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/test_compose_package.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/test_import_slide.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/test_oxml.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/test_packuri.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/test_autoshape.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/test_groupshape.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/test_picture.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test___init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_dml.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_ns.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_simpletypes.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_table.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_theme.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_xmlchemy.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/unitdata/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/unitdata/dml.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/unitdata/shape.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/unitdata/text.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_chart.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_coreprops.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_embeddedpackage.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_media.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/schema/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_anchor.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_animate.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_autoshape.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_base.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_connector.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_freeform.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_graphfrm.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_group.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_picture.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_placeholder.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_accessibility.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_action.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_animation.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_compose_from_spec.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_diagrams.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/calibriz.ttf +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/cdw-logo.eps +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/dummy.mp4 +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/minimal.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/missing_rels_item.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/monty-truth.png +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/no-core-props.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/no-slides.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/presentation.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/python-icon.jpeg +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/python-powered.png +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/python.bmp +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/slideLayout1.xml +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/cat-labels.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/default-notes.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/default-theme.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/freeform.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/placeholders.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/relationships.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/timing.txt +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/test.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/test_slides.pptx +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_formats.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_geometry.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_inherit.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_lint.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_lint_on_save.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_math.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_media.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_new_features.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_package.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_powerpoint_strict_validation.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_presentation.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_render.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_render_slides_alias.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_section.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_shape_helpers.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_shared.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_skill.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_smart_art.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_svg_picture.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_table_extras.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_theme.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_transition_morph.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/text/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/text/test_fonts.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/text/test_layout.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitdata.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitutil/__init__.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitutil/cxml.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitutil/file.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitutil/mock.py +0 -0
- {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tox.ini +0 -0
|
@@ -15,6 +15,126 @@ can sit beside both ``python-pptx`` (``pptx``) and ``power-pptx``
|
|
|
15
15
|
.. _`scanny/python-pptx`: https://github.com/scanny/python-pptx
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
2.16.0 (2026-08-30)
|
|
19
|
+
+++++++++++++++++++
|
|
20
|
+
|
|
21
|
+
Added
|
|
22
|
+
.....
|
|
23
|
+
|
|
24
|
+
* ``audit(..., extra_safe_fonts=[...])`` — the font-warning probe now
|
|
25
|
+
accepts additional fonts to treat as safe (case-insensitive), on top
|
|
26
|
+
of the built-in common Windows/macOS/Office list. For rendering
|
|
27
|
+
environments that genuinely ship a font the built-in list doesn't
|
|
28
|
+
know — e.g. a Linux sandbox whose font policy standardizes on
|
|
29
|
+
``DejaVu Sans`` — this keeps the audit signal instead of drowning it
|
|
30
|
+
in per-slide warnings.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
2.15.0 (2026-08-30)
|
|
34
|
+
+++++++++++++++++++
|
|
35
|
+
|
|
36
|
+
Twelve ports from the upstream ``scanny/python-pptx`` pull-request
|
|
37
|
+
backlog, triaged against this fork's existing surface: four correctness
|
|
38
|
+
fixes (notes-master registration, ``.potx`` opening, MPO images,
|
|
39
|
+
``PathLike`` inputs) and eight features (``add_paragraph(text=...)``,
|
|
40
|
+
``get_by_name()`` on shape collections, doughnut first-slice angle,
|
|
41
|
+
``Slides.remove()``, table row/column add & remove, custom document
|
|
42
|
+
properties, slide-number/date fields, slide-layout authoring).
|
|
43
|
+
|
|
44
|
+
Added
|
|
45
|
+
.....
|
|
46
|
+
|
|
47
|
+
* ``TextFrame.add_paragraph()`` accepts an optional ``text`` argument.
|
|
48
|
+
When given, the new paragraph carries that text as a single run
|
|
49
|
+
(``add_paragraph("Hello")`` is equivalent to ``add_paragraph()``
|
|
50
|
+
followed by setting ``.text``); when omitted, an empty paragraph is
|
|
51
|
+
added exactly as before (upstream feature by kckaiwei,
|
|
52
|
+
``scanny/python-pptx#602``).
|
|
53
|
+
* ``get_by_name(name, default=None)`` on shape collections
|
|
54
|
+
(``slide.shapes``, layout/master/notes shape trees, group shapes, and
|
|
55
|
+
placeholder collections via ``_BaseShapes``) — returns the first
|
|
56
|
+
shape whose ``name`` matches, or ``default`` when none does
|
|
57
|
+
(port of `scanny/python-pptx#798`_ by lthamm).
|
|
58
|
+
|
|
59
|
+
.. _`scanny/python-pptx#798`: https://github.com/scanny/python-pptx/pull/798
|
|
60
|
+
* ``DoughnutPlot.first_slice_angle`` — read/write angle in degrees
|
|
61
|
+
(0–359) of the first doughnut slice, mapped to the
|
|
62
|
+
``<c:firstSliceAng>`` element. ``CategoryChartData.first_slice_angle``
|
|
63
|
+
bakes the angle into charts created with ``add_chart``; the plot
|
|
64
|
+
property also works on charts opened from a file.
|
|
65
|
+
* ``prs.slides.remove(slide)`` — delete a slide from the presentation,
|
|
66
|
+
accepting either the |Slide| object or its integer slide id (upstream's
|
|
67
|
+
``remove_slide`` signature). Purges ``p14:section`` membership and drops
|
|
68
|
+
the presentation→slide relationship so the slide part (and its notes
|
|
69
|
+
slide) fall out of the saved package. Raises ``ValueError`` for a slide
|
|
70
|
+
not in the collection. Removing the last slide yields a valid, empty
|
|
71
|
+
deck.
|
|
72
|
+
* ``table.rows.add_row()`` / ``table.rows.remove(row_or_idx)`` and
|
|
73
|
+
``table.columns.add_column(width=None)`` /
|
|
74
|
+
``table.columns.remove(col_or_idx)`` — grow and shrink an existing
|
|
75
|
+
table. A new row/column copies the height/width and cell formatting
|
|
76
|
+
of the last row/column and arrives empty and unmerged; removal keeps
|
|
77
|
+
the one-``a:tc``-per-``a:gridCol`` invariant, resizes the graphic
|
|
78
|
+
frame, and raises ``ValueError`` rather than truncate a merged cell
|
|
79
|
+
spanning multiple rows/columns. Port of scanny/python-pptx#399 by
|
|
80
|
+
Ignisor.
|
|
81
|
+
* ``prs.custom_properties`` — mapping-style read/write access to the
|
|
82
|
+
user-defined document properties in ``/docProps/custom.xml``.
|
|
83
|
+
``get``/``set``/``delete`` with ``str``, ``int``, ``float``, and
|
|
84
|
+
``bool`` values (stored as ``vt:lpstr``, ``vt:i4``, ``vt:r8``, and
|
|
85
|
+
``vt:bool``); the part and its package-root relationship are created
|
|
86
|
+
lazily by the first assignment, and files that already carry a
|
|
87
|
+
custom-properties part open mapped to the new part class. Port of
|
|
88
|
+
``scanny/python-pptx#342`` by stadlerism.
|
|
89
|
+
* ``SlideLayouts.add_layout()`` appends a blank slide layout to a slide
|
|
90
|
+
master, named ``"Layout %s"`` by default (the ``%s`` is substituted with
|
|
91
|
+
the new master-to-layout relationship id). ``SlideLayouts.clone()``
|
|
92
|
+
deep-copies an existing layout of the same presentation — placeholders,
|
|
93
|
+
shapes, and referenced images included — under a non-colliding name, and
|
|
94
|
+
``LayoutShapes.add_placeholder()`` adds a placeholder to a layout,
|
|
95
|
+
defaulting its idx to the matching master placeholder so inheritance and
|
|
96
|
+
``slide.shapes.title`` keep working.
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
Fixed
|
|
100
|
+
.....
|
|
101
|
+
|
|
102
|
+
* Creating a notes master (``prs.notes_master`` on a deck without one,
|
|
103
|
+
e.g. the default template) related the new part but never wrote the
|
|
104
|
+
matching ``p:notesMasterIdLst`` / ``p:notesMasterId`` entry into
|
|
105
|
+
``presentation.xml``, so PowerPoint could flag the saved file for
|
|
106
|
+
repair. The id list is now registered on creation and reconciled on
|
|
107
|
+
access for decks saved by older versions (port of
|
|
108
|
+
scanny/python-pptx#1128 by robbybrodie).
|
|
109
|
+
* ``@lazyproperty`` now caches a getter that legitimately returns
|
|
110
|
+
``None``. The instance-cache hit test compared the cached value to
|
|
111
|
+
``None``, so a ``None``-returning getter was silently re-evaluated on
|
|
112
|
+
every access, contradicting the decorator's documented evaluate-once
|
|
113
|
+
guarantee. The check is now key presence in the host object's
|
|
114
|
+
``__dict__`` (upstream fix by Afonso Januário,
|
|
115
|
+
``fix/lazyproperty-none-value-caching``).
|
|
116
|
+
* MPO-encoded JPEG images (multi-picture object files common from
|
|
117
|
+
cameras, ``.mpo``) are accepted by ``add_picture()`` and
|
|
118
|
+
``Image.from_file()`` instead of raising ``ValueError: unsupported
|
|
119
|
+
image format``. Pillow reports these as format ``MPO``; they are
|
|
120
|
+
mapped to the canonical ``jpg`` extension and ``image/jpeg``
|
|
121
|
+
content type (port of scanny/python-pptx#1075 by riparuk).
|
|
122
|
+
* ``Presentation()`` now opens ``.potx`` template files. The main-document
|
|
123
|
+
part check only accepted the presentation and macro-enabled presentation
|
|
124
|
+
content types, so a template package raised ``ValueError``; the
|
|
125
|
+
``presentationml.template.main+xml`` type is now accepted as well (port
|
|
126
|
+
of scanny/python-pptx#1071 by 9021007).
|
|
127
|
+
* ``os.PathLike`` inputs (e.g. ``pathlib.Path``) are now accepted
|
|
128
|
+
wherever a file path was: ``Presentation()`` open and ``save()``,
|
|
129
|
+
``Image.from_file()``, ``shapes.add_picture()``, and picture-placeholder
|
|
130
|
+
``insert_picture()``. Previously a ``Path`` raised ``TypeError`` from
|
|
131
|
+
``Image.from_file()`` and was misrouted as a stream by the package
|
|
132
|
+
reader. No behavior change for ``str`` or file-like inputs (port of
|
|
133
|
+
`scanny/python-pptx#1123`_ by AlexanderWillner).
|
|
134
|
+
|
|
135
|
+
.. _`scanny/python-pptx#1123`: https://github.com/scanny/python-pptx/pull/1123
|
|
136
|
+
|
|
137
|
+
|
|
18
138
|
2.14.0 (2026-08-26)
|
|
19
139
|
+++++++++++++++++++
|
|
20
140
|
|
|
@@ -28,6 +148,12 @@ to concatenated digits (``7/10`` → ``710``). Slides now declare the
|
|
|
28
148
|
Added
|
|
29
149
|
.....
|
|
30
150
|
|
|
151
|
+
* ``Paragraph.add_field()`` appends slide-number and date/time fields
|
|
152
|
+
(``a:fld``) to a paragraph, with the new ``MSO_TEXT_FIELD_TYPE``
|
|
153
|
+
enumeration covering the ``slidenum`` / ``datetime*`` tokens. Fields are
|
|
154
|
+
created with the schema-required braced GUID ``id`` and a cached-text
|
|
155
|
+
(``a:t``) placeholder PowerPoint replaces with the computed value at
|
|
156
|
+
render time; ``_Field`` exposes ``type``, ``text``, and ``font``.
|
|
31
157
|
* **Bundled ``pptx2.mathml2omml``** — spec-compliant ``m:f`` / ``m:rad``
|
|
32
158
|
/ ``m:nary`` / ``m:sSub`` / matrices / accents. ``python-pptx2[math]``
|
|
33
159
|
now only needs ``latex2mathml``.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-pptx2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.16.0
|
|
4
4
|
Summary: Create, read, and update PowerPoint 2007+ (.pptx) files. Fork of power-pptx / python-pptx, published as python-pptx2.
|
|
5
5
|
Author: Matěj Štágl
|
|
6
6
|
Author-email: stagl@wattlescript.org
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from behave import given, then, when
|
|
6
|
-
from helpers import test_pptx
|
|
6
|
+
from helpers import saved_pptx_path, test_pptx
|
|
7
7
|
|
|
8
8
|
from pptx2 import Presentation
|
|
9
9
|
from pptx2.enum.text import MSO_ANCHOR # noqa # pyright: ignore[reportUnusedImport]
|
|
@@ -16,6 +16,8 @@ from pptx2.util import Inches
|
|
|
16
16
|
@given("a 2x2 Table object as table")
|
|
17
17
|
def given_a_2x2_Table_object_as_table(context):
|
|
18
18
|
prs = Presentation(test_pptx("shp-shapes"))
|
|
19
|
+
# ---prs is stashed so a later "I save the presentation" step can save it---
|
|
20
|
+
context.prs = prs
|
|
19
21
|
context.table_ = prs.slides[0].shapes[3].table
|
|
20
22
|
|
|
21
23
|
|
|
@@ -152,6 +154,26 @@ def when_I_call_origin_cell_merge_other_cell(context):
|
|
|
152
154
|
context.origin_cell.merge(context.other_cell)
|
|
153
155
|
|
|
154
156
|
|
|
157
|
+
@when("I add a row to the table")
|
|
158
|
+
def when_I_add_a_row_to_the_table(context):
|
|
159
|
+
context.table_.rows.add_row()
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
@when("I add a column to the table")
|
|
163
|
+
def when_I_add_a_column_to_the_table(context):
|
|
164
|
+
context.table_.columns.add_column()
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
@when("I remove the second row of the table")
|
|
168
|
+
def when_I_remove_the_second_row_of_the_table(context):
|
|
169
|
+
context.table_.rows.remove(1)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
@when("I remove the second column of the table")
|
|
173
|
+
def when_I_remove_the_second_column_of_the_table(context):
|
|
174
|
+
context.table_.columns.remove(1)
|
|
175
|
+
|
|
176
|
+
|
|
155
177
|
# then ====================================================
|
|
156
178
|
|
|
157
179
|
|
|
@@ -298,6 +320,24 @@ def then_table_rows_is_a_type_object(context, type_name):
|
|
|
298
320
|
assert actual == expected, "table.rows is a %s object" % actual
|
|
299
321
|
|
|
300
322
|
|
|
323
|
+
@then("the saved table has {int_lit} rows")
|
|
324
|
+
@then("the saved table has {int_lit} row")
|
|
325
|
+
def then_the_saved_table_has_n_rows(context, int_lit):
|
|
326
|
+
table = Presentation(saved_pptx_path).slides[0].shapes[3].table
|
|
327
|
+
actual = len(table.rows)
|
|
328
|
+
expected = int(int_lit)
|
|
329
|
+
assert actual == expected, "the saved table has %s rows" % actual
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
@then("the saved table has {int_lit} columns")
|
|
333
|
+
@then("the saved table has {int_lit} column")
|
|
334
|
+
def then_the_saved_table_has_n_columns(context, int_lit):
|
|
335
|
+
table = Presentation(saved_pptx_path).slides[0].shapes[3].table
|
|
336
|
+
actual = len(table.columns)
|
|
337
|
+
expected = int(int_lit)
|
|
338
|
+
assert actual == expected, "the saved table has %s columns" % actual
|
|
339
|
+
|
|
340
|
+
|
|
301
341
|
@then("table.vert_banding is {bool_lit}")
|
|
302
342
|
def then_table_vert_banding_is_value(context, bool_lit):
|
|
303
343
|
actual = context.table_.vert_banding
|
|
@@ -58,3 +58,31 @@ Feature: Table properties and methods
|
|
|
58
58
|
Given a 2x2 Table object as table
|
|
59
59
|
When I assign table.vert_banding = True
|
|
60
60
|
Then table.vert_banding is True
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
Scenario: Append table row
|
|
64
|
+
Given a 2x2 Table object as table
|
|
65
|
+
When I add a row to the table
|
|
66
|
+
And I save the presentation
|
|
67
|
+
Then the saved table has 3 rows
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
Scenario: Remove table row
|
|
71
|
+
Given a 2x2 Table object as table
|
|
72
|
+
When I remove the second row of the table
|
|
73
|
+
And I save the presentation
|
|
74
|
+
Then the saved table has 1 row
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
Scenario: Append table column
|
|
78
|
+
Given a 2x2 Table object as table
|
|
79
|
+
When I add a column to the table
|
|
80
|
+
And I save the presentation
|
|
81
|
+
Then the saved table has 3 columns
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
Scenario: Remove table column
|
|
85
|
+
Given a 2x2 Table object as table
|
|
86
|
+
When I remove the second column of the table
|
|
87
|
+
And I save the presentation
|
|
88
|
+
Then the saved table has 1 column
|
|
@@ -35,6 +35,7 @@ from pptx2.opc.constants import CONTENT_TYPE as CT
|
|
|
35
35
|
from pptx2.opc.package import PartFactory
|
|
36
36
|
from pptx2.parts.chart import ChartPart
|
|
37
37
|
from pptx2.parts.coreprops import CorePropertiesPart
|
|
38
|
+
from pptx2.parts.customprops import CustomPropertiesPart
|
|
38
39
|
from pptx2.parts.diagram import (
|
|
39
40
|
DiagramColorsPart,
|
|
40
41
|
DiagramDataPart,
|
|
@@ -56,7 +57,7 @@ from pptx2.parts.slide import (
|
|
|
56
57
|
if TYPE_CHECKING:
|
|
57
58
|
from pptx2.opc.package import Part
|
|
58
59
|
|
|
59
|
-
__version__ = "2.
|
|
60
|
+
__version__ = "2.16.0"
|
|
60
61
|
|
|
61
62
|
sys.modules["pptx2.exceptions"] = exceptions
|
|
62
63
|
del sys
|
|
@@ -98,6 +99,7 @@ content_type_to_part_class_map: dict[str, type[Part]] = {
|
|
|
98
99
|
CT.PML_TEMPLATE_MAIN: PresentationPart,
|
|
99
100
|
CT.PML_SLIDESHOW_MAIN: PresentationPart,
|
|
100
101
|
CT.OPC_CORE_PROPERTIES: CorePropertiesPart,
|
|
102
|
+
CT.OFC_CUSTOM_PROPERTIES: CustomPropertiesPart,
|
|
101
103
|
CT.PML_NOTES_MASTER: NotesMasterPart,
|
|
102
104
|
CT.PML_NOTES_SLIDE: NotesSlidePart,
|
|
103
105
|
CT.PML_SLIDE: SlidePart,
|
|
@@ -136,6 +138,7 @@ PartFactory.part_type_for.update(content_type_to_part_class_map)
|
|
|
136
138
|
del (
|
|
137
139
|
ChartPart,
|
|
138
140
|
CorePropertiesPart,
|
|
141
|
+
CustomPropertiesPart,
|
|
139
142
|
DiagramColorsPart,
|
|
140
143
|
DiagramDataPart,
|
|
141
144
|
DiagramLayoutPart,
|
|
@@ -93,6 +93,37 @@ def import_slide(
|
|
|
93
93
|
return importer.run()
|
|
94
94
|
|
|
95
95
|
|
|
96
|
+
def next_layout_hierarchy_id(prs_part: PresentationPart) -> int:
|
|
97
|
+
"""Return a fresh unique id for a `p:sldMasterId` / `p:sldLayoutId` entry.
|
|
98
|
+
|
|
99
|
+
These share one id space starting at 2147483648 (ST_SlideMasterId /
|
|
100
|
+
ST_SlideLayoutId minimum); duplicates across the presentation are a
|
|
101
|
+
repair trigger, so scan every master's layout-id list plus the
|
|
102
|
+
presentation's master-id list for the current maximum. Used both when
|
|
103
|
+
cloning masters (import_slide) and when adding or cloning slide layouts.
|
|
104
|
+
"""
|
|
105
|
+
used = [2147483647]
|
|
106
|
+
prs_element = prs_part._element # pyright: ignore[reportPrivateUsage]
|
|
107
|
+
used += [int(v) for v in prs_element.xpath("p:sldMasterIdLst/p:sldMasterId/@id")]
|
|
108
|
+
for dst_master_part in _iter_master_parts(prs_part):
|
|
109
|
+
used += [
|
|
110
|
+
int(v)
|
|
111
|
+
for v in dst_master_part._element.xpath( # pyright: ignore[reportPrivateUsage]
|
|
112
|
+
"p:sldLayoutIdLst/p:sldLayoutId/@id"
|
|
113
|
+
)
|
|
114
|
+
]
|
|
115
|
+
return max(used) + 1
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _iter_master_parts(prs_part: PresentationPart):
|
|
119
|
+
"""Yield each SlideMasterPart referenced from *prs_part*'s `p:sldMasterIdLst`."""
|
|
120
|
+
prs_element = prs_part._element # pyright: ignore[reportPrivateUsage]
|
|
121
|
+
if prs_element.sldMasterIdLst is None:
|
|
122
|
+
return
|
|
123
|
+
for entry in prs_element.sldMasterIdLst.sldMasterId_lst:
|
|
124
|
+
yield prs_part.related_part(entry.rId)
|
|
125
|
+
|
|
126
|
+
|
|
96
127
|
# ---------------------------------------------------------------------------
|
|
97
128
|
# Internal implementation
|
|
98
129
|
# ---------------------------------------------------------------------------
|
|
@@ -169,13 +200,9 @@ class _SlideImporter:
|
|
|
169
200
|
return dst_master_part
|
|
170
201
|
return None
|
|
171
202
|
|
|
172
|
-
def _iter_dst_masters(self):
|
|
203
|
+
def _iter_dst_masters(self):
|
|
173
204
|
"""Yield each SlideMasterPart already in the destination presentation."""
|
|
174
|
-
|
|
175
|
-
if prs_element.sldMasterIdLst is None:
|
|
176
|
-
return
|
|
177
|
-
for entry in prs_element.sldMasterIdLst.sldMasterId_lst:
|
|
178
|
-
yield self._dst_prs_part.related_part(entry.rId)
|
|
205
|
+
yield from _iter_master_parts(self._dst_prs_part)
|
|
179
206
|
|
|
180
207
|
def _find_or_clone_layout_in_master(
|
|
181
208
|
self, src_layout_part: SlideLayoutPart, dst_master_part: SlideMasterPart
|
|
@@ -325,22 +352,9 @@ class _SlideImporter:
|
|
|
325
352
|
def _next_hierarchy_id(self) -> int:
|
|
326
353
|
"""Return a fresh unique id for a `p:sldMasterId` / `p:sldLayoutId` entry.
|
|
327
354
|
|
|
328
|
-
|
|
329
|
-
ST_SlideLayoutId minimum); duplicates across the presentation are a
|
|
330
|
-
repair trigger, so scan every master's layout-id list plus the
|
|
331
|
-
presentation's master-id list for the current maximum.
|
|
355
|
+
See :func:`next_layout_hierarchy_id`.
|
|
332
356
|
"""
|
|
333
|
-
|
|
334
|
-
prs_element = self._dst_prs_part._element # pyright: ignore[reportPrivateUsage]
|
|
335
|
-
used += [int(v) for v in prs_element.xpath("p:sldMasterIdLst/p:sldMasterId/@id")]
|
|
336
|
-
for dst_master_part in self._iter_dst_masters():
|
|
337
|
-
used += [
|
|
338
|
-
int(v)
|
|
339
|
-
for v in dst_master_part._element.xpath( # pyright: ignore[reportPrivateUsage]
|
|
340
|
-
"p:sldLayoutIdLst/p:sldLayoutId/@id"
|
|
341
|
-
)
|
|
342
|
-
]
|
|
343
|
-
return max(used) + 1
|
|
357
|
+
return next_layout_hierarchy_id(self._dst_prs_part)
|
|
344
358
|
|
|
345
359
|
# ------------------------------------------------------------------
|
|
346
360
|
# Slide copy
|
|
@@ -18,12 +18,14 @@ if TYPE_CHECKING:
|
|
|
18
18
|
from pptx2.parts.presentation import PresentationPart
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
def Presentation(
|
|
21
|
+
def Presentation(
|
|
22
|
+
pptx: str | os.PathLike[str] | IO[bytes] | None = None,
|
|
23
|
+
) -> presentation.Presentation:
|
|
22
24
|
"""
|
|
23
25
|
Return a |Presentation| object loaded from *pptx*, where *pptx* can be
|
|
24
|
-
either a path to a ``.pptx`` file (a string) or a
|
|
25
|
-
*pptx* is missing or ``None``, the built-in default
|
|
26
|
-
"template" is loaded.
|
|
26
|
+
either a path to a ``.pptx`` file (a string or ``pathlib.Path``) or a
|
|
27
|
+
file-like object. If *pptx* is missing or ``None``, the built-in default
|
|
28
|
+
presentation "template" is loaded.
|
|
27
29
|
"""
|
|
28
30
|
if pptx is None:
|
|
29
31
|
pptx = _default_pptx_path()
|
|
@@ -45,5 +47,9 @@ def _default_pptx_path() -> str:
|
|
|
45
47
|
|
|
46
48
|
def _is_pptx_package(prs_part: PresentationPart):
|
|
47
49
|
"""Return |True| if *prs_part* is a valid main document part, |False| otherwise."""
|
|
48
|
-
valid_content_types = (
|
|
50
|
+
valid_content_types = (
|
|
51
|
+
CT.PML_PRESENTATION_MAIN,
|
|
52
|
+
CT.PML_PRES_MACRO_MAIN,
|
|
53
|
+
CT.PML_TEMPLATE_MAIN,
|
|
54
|
+
)
|
|
49
55
|
return prs_part.content_type in valid_content_types
|
|
@@ -30,7 +30,7 @@ The audit is read-only — it never mutates the deck.
|
|
|
30
30
|
from __future__ import annotations
|
|
31
31
|
|
|
32
32
|
from dataclasses import dataclass, field
|
|
33
|
-
from typing import TYPE_CHECKING, Any
|
|
33
|
+
from typing import TYPE_CHECKING, Any, Iterable
|
|
34
34
|
|
|
35
35
|
if TYPE_CHECKING:
|
|
36
36
|
from pptx2.api import Presentation
|
|
@@ -174,15 +174,27 @@ def audit(
|
|
|
174
174
|
*,
|
|
175
175
|
size_warn_bytes: int = 2_000_000,
|
|
176
176
|
check_fonts: bool = True,
|
|
177
|
+
extra_safe_fonts: "Iterable[str] | None" = None,
|
|
177
178
|
) -> AuditReport:
|
|
178
179
|
"""Walk the deck and return an :class:`AuditReport` summary.
|
|
179
180
|
|
|
180
181
|
Read-only — never mutates the presentation. Each slide is linted
|
|
181
182
|
in passing-defaults mode; per-slide overrides should be supplied
|
|
182
183
|
via the slide-level ``slide.lint(...)`` API directly.
|
|
184
|
+
|
|
185
|
+
*extra_safe_fonts* names additional fonts to treat as safe for the
|
|
186
|
+
font-warning probe, on top of the common Windows/macOS/Office set
|
|
187
|
+
(matching is case-insensitive). Use it where the rendering
|
|
188
|
+
environment genuinely ships the font — e.g. ``DejaVu Sans`` in a
|
|
189
|
+
sandbox whose font policy standardizes on it, or a corporate font
|
|
190
|
+
you embed in every deck.
|
|
183
191
|
"""
|
|
184
192
|
from pptx2.shapes.picture import Picture
|
|
185
193
|
|
|
194
|
+
safe_fonts = _COMMON_FONTS
|
|
195
|
+
if extra_safe_fonts is not None:
|
|
196
|
+
safe_fonts = _COMMON_FONTS | frozenset(f.lower() for f in extra_safe_fonts)
|
|
197
|
+
|
|
186
198
|
report = AuditReport()
|
|
187
199
|
slides = list(prs.slides)
|
|
188
200
|
report.total_slides = len(slides)
|
|
@@ -249,7 +261,7 @@ def audit(
|
|
|
249
261
|
for para in tf.paragraphs:
|
|
250
262
|
for run in para.runs:
|
|
251
263
|
name = run.font.name
|
|
252
|
-
if name and name.lower() not in
|
|
264
|
+
if name and name.lower() not in safe_fonts:
|
|
253
265
|
report.font_warnings.append((idx, name))
|
|
254
266
|
|
|
255
267
|
if content_shapes == 0:
|
|
@@ -12,6 +12,7 @@ from pptx2.chart.xlsx import (
|
|
|
12
12
|
XyWorkbookWriter,
|
|
13
13
|
)
|
|
14
14
|
from pptx2.chart.xmlwriter import ChartXmlWriter
|
|
15
|
+
from pptx2.oxml.simpletypes import ST_FirstSliceAng
|
|
15
16
|
from pptx2.util import lazyproperty
|
|
16
17
|
|
|
17
18
|
|
|
@@ -268,6 +269,8 @@ class CategoryChartData(_BaseChartData):
|
|
|
268
269
|
The corresponding X value is inferred by its position in the sequence.
|
|
269
270
|
"""
|
|
270
271
|
|
|
272
|
+
_first_slice_angle = 0
|
|
273
|
+
|
|
271
274
|
def add_category(self, label):
|
|
272
275
|
"""
|
|
273
276
|
Return a newly created |data.Category| object having *label* and
|
|
@@ -323,6 +326,20 @@ class CategoryChartData(_BaseChartData):
|
|
|
323
326
|
"""
|
|
324
327
|
return self._workbook_writer.categories_ref
|
|
325
328
|
|
|
329
|
+
@property
|
|
330
|
+
def first_slice_angle(self):
|
|
331
|
+
"""
|
|
332
|
+
Read/write int in range 0..359 specifying the angle in degrees of
|
|
333
|
+
the first slice for a doughnut chart created from this chart data,
|
|
334
|
+
clockwise from 12 o'clock. The default is 0, the PowerPoint default.
|
|
335
|
+
"""
|
|
336
|
+
return self._first_slice_angle
|
|
337
|
+
|
|
338
|
+
@first_slice_angle.setter
|
|
339
|
+
def first_slice_angle(self, value):
|
|
340
|
+
ST_FirstSliceAng.validate(value)
|
|
341
|
+
self._first_slice_angle = int(value)
|
|
342
|
+
|
|
326
343
|
def values_ref(self, series):
|
|
327
344
|
"""
|
|
328
345
|
The Excel worksheet reference to the values for *series* (not
|
|
@@ -220,6 +220,25 @@ class DoughnutPlot(_BasePlot):
|
|
|
220
220
|
holeSize = self._element.get_or_add_holeSize()
|
|
221
221
|
holeSize.val = value
|
|
222
222
|
|
|
223
|
+
@property
|
|
224
|
+
def first_slice_angle(self):
|
|
225
|
+
"""
|
|
226
|
+
Read/write int in range 0..359 specifying the angle in degrees of
|
|
227
|
+
the first slice of this doughnut, clockwise from 12 o'clock. The
|
|
228
|
+
PowerPoint default for a new doughnut chart is 0, which is what this
|
|
229
|
+
property reports when no explicit ``<c:firstSliceAng>`` element is
|
|
230
|
+
present.
|
|
231
|
+
"""
|
|
232
|
+
firstSliceAng = self._element.firstSliceAng
|
|
233
|
+
if firstSliceAng is None:
|
|
234
|
+
return 0
|
|
235
|
+
return firstSliceAng.val
|
|
236
|
+
|
|
237
|
+
@first_slice_angle.setter
|
|
238
|
+
def first_slice_angle(self, value):
|
|
239
|
+
firstSliceAng = self._element.get_or_add_firstSliceAng()
|
|
240
|
+
firstSliceAng.val = value
|
|
241
|
+
|
|
223
242
|
|
|
224
243
|
class LinePlot(_BasePlot):
|
|
225
244
|
"""
|
|
@@ -669,7 +669,7 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
|
|
|
669
669
|
' <c:showBubbleSize val="0"/>\n'
|
|
670
670
|
' <c:showLeaderLines val="1"/>\n'
|
|
671
671
|
" </c:dLbls>\n"
|
|
672
|
-
' <c:firstSliceAng val="
|
|
672
|
+
' <c:firstSliceAng val="{firstSliceAng}"/>\n'
|
|
673
673
|
' <c:holeSize val="50"/>\n'
|
|
674
674
|
" </c:doughnutChart>\n"
|
|
675
675
|
" </c:plotArea>\n"
|
|
@@ -693,7 +693,7 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
|
|
|
693
693
|
" </a:p>\n"
|
|
694
694
|
" </c:txPr>\n"
|
|
695
695
|
"</c:chartSpace>\n"
|
|
696
|
-
).format(**{"ser_xml": self._ser_xml})
|
|
696
|
+
).format(**{"ser_xml": self._ser_xml, "firstSliceAng": self._firstSliceAng})
|
|
697
697
|
|
|
698
698
|
@property
|
|
699
699
|
def _explosion_xml(self):
|
|
@@ -701,6 +701,15 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
|
|
|
701
701
|
return ' <c:explosion val="25"/>\n'
|
|
702
702
|
return ""
|
|
703
703
|
|
|
704
|
+
@property
|
|
705
|
+
def _firstSliceAng(self):
|
|
706
|
+
"""
|
|
707
|
+
The integer angle in degrees for the ``<c:firstSliceAng>`` element,
|
|
708
|
+
taken from the chart data object when it specifies one and 0
|
|
709
|
+
(the PowerPoint default) otherwise.
|
|
710
|
+
"""
|
|
711
|
+
return getattr(self._chart_data, "first_slice_angle", 0)
|
|
712
|
+
|
|
704
713
|
@property
|
|
705
714
|
def _ser_xml(self):
|
|
706
715
|
xml = ""
|
|
@@ -228,3 +228,75 @@ class PP_PARAGRAPH_ALIGNMENT(BaseXmlEnum):
|
|
|
228
228
|
|
|
229
229
|
|
|
230
230
|
PP_ALIGN = PP_PARAGRAPH_ALIGNMENT
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
class MSO_TEXT_FIELD_TYPE(BaseXmlEnum):
|
|
234
|
+
"""Specifies the kind of value a text field (`a:fld`) displays.
|
|
235
|
+
|
|
236
|
+
Used with :meth:`.Paragraph.add_field` to add a run-like field element to a paragraph.
|
|
237
|
+
The field's displayed text (the actual slide number, the current date, ...) is computed by
|
|
238
|
+
PowerPoint when the slide is rendered; the `a:t` child element holds only the "cached"
|
|
239
|
+
placeholder text readers that do not compute fields will show.
|
|
240
|
+
|
|
241
|
+
Example::
|
|
242
|
+
|
|
243
|
+
from pptx2.enum.text import MSO_TEXT_FIELD_TYPE
|
|
244
|
+
|
|
245
|
+
paragraph.add_field(MSO_TEXT_FIELD_TYPE.SLIDE_NUMBER)
|
|
246
|
+
|
|
247
|
+
The XML tokens are the ST_TextFieldType values DrawingML defines ("slidenum", "datetime",
|
|
248
|
+
"datetime1" through "datetime13") plus "datetimeFigureOut", the token PowerPoint writes for
|
|
249
|
+
an automatically updated date.
|
|
250
|
+
"""
|
|
251
|
+
|
|
252
|
+
SLIDE_NUMBER = (1, "slidenum", "The number of the slide the field appears on.")
|
|
253
|
+
"""The number of the slide the field appears on."""
|
|
254
|
+
|
|
255
|
+
DATETIME = (2, "datetime", "The date and time in the containing document's default format.")
|
|
256
|
+
"""The date and time in the containing document's default format."""
|
|
257
|
+
|
|
258
|
+
DATETIME_1 = (3, "datetime1", "Predefined date/time format 1 (locale-dependent rendering).")
|
|
259
|
+
"""Predefined date/time format 1 (locale-dependent rendering)."""
|
|
260
|
+
|
|
261
|
+
DATETIME_2 = (4, "datetime2", "Predefined date/time format 2 (locale-dependent rendering).")
|
|
262
|
+
"""Predefined date/time format 2 (locale-dependent rendering)."""
|
|
263
|
+
|
|
264
|
+
DATETIME_3 = (5, "datetime3", "Predefined date/time format 3 (locale-dependent rendering).")
|
|
265
|
+
"""Predefined date/time format 3 (locale-dependent rendering)."""
|
|
266
|
+
|
|
267
|
+
DATETIME_4 = (6, "datetime4", "Predefined date/time format 4 (locale-dependent rendering).")
|
|
268
|
+
"""Predefined date/time format 4 (locale-dependent rendering)."""
|
|
269
|
+
|
|
270
|
+
DATETIME_5 = (7, "datetime5", "Predefined date/time format 5 (locale-dependent rendering).")
|
|
271
|
+
"""Predefined date/time format 5 (locale-dependent rendering)."""
|
|
272
|
+
|
|
273
|
+
DATETIME_6 = (8, "datetime6", "Predefined date/time format 6 (locale-dependent rendering).")
|
|
274
|
+
"""Predefined date/time format 6 (locale-dependent rendering)."""
|
|
275
|
+
|
|
276
|
+
DATETIME_7 = (9, "datetime7", "Predefined date/time format 7 (locale-dependent rendering).")
|
|
277
|
+
"""Predefined date/time format 7 (locale-dependent rendering)."""
|
|
278
|
+
|
|
279
|
+
DATETIME_8 = (10, "datetime8", "Predefined date/time format 8 (locale-dependent rendering).")
|
|
280
|
+
"""Predefined date/time format 8 (locale-dependent rendering)."""
|
|
281
|
+
|
|
282
|
+
DATETIME_9 = (11, "datetime9", "Predefined date/time format 9 (locale-dependent rendering).")
|
|
283
|
+
"""Predefined date/time format 9 (locale-dependent rendering)."""
|
|
284
|
+
|
|
285
|
+
DATETIME_10 = (12, "datetime10", "Predefined date/time format 10 (locale-dependent rendering).")
|
|
286
|
+
"""Predefined date/time format 10 (locale-dependent rendering)."""
|
|
287
|
+
|
|
288
|
+
DATETIME_11 = (13, "datetime11", "Predefined date/time format 11 (locale-dependent rendering).")
|
|
289
|
+
"""Predefined date/time format 11 (locale-dependent rendering)."""
|
|
290
|
+
|
|
291
|
+
DATETIME_12 = (14, "datetime12", "Predefined date/time format 12 (locale-dependent rendering).")
|
|
292
|
+
"""Predefined date/time format 12 (locale-dependent rendering)."""
|
|
293
|
+
|
|
294
|
+
DATETIME_13 = (15, "datetime13", "Predefined date/time format 13 (locale-dependent rendering).")
|
|
295
|
+
"""Predefined date/time format 13 (locale-dependent rendering)."""
|
|
296
|
+
|
|
297
|
+
DATETIME_FIGURE_OUT = (
|
|
298
|
+
16,
|
|
299
|
+
"datetimeFigureOut",
|
|
300
|
+
"The current date, in the format PowerPoint figures out automatically.",
|
|
301
|
+
)
|
|
302
|
+
"""The current date, in the format PowerPoint figures out automatically."""
|