python-pptx2 2.17.0__tar.gz → 2.18.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.17.0 → python_pptx2-2.18.0}/HISTORY.rst +19 -0
- {python_pptx2-2.17.0/src/python_pptx2.egg-info → python_pptx2-2.18.0}/PKG-INFO +1 -1
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/__init__.py +1 -1
- python_pptx2-2.18.0/src/pptx2/_agent_friendly.py +136 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/shapetree.py +213 -46
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/basics.md +9 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0/src/python_pptx2.egg-info}/PKG-INFO +1 -1
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/SOURCES.txt +1 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_shape_helpers.py +64 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/LICENSE +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/MANIFEST.in +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/README.rst +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/act-action.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/act-hyperlink.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-axis-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-axistitle-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-category-access.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-category-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-chart.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-charttitle-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-data-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-datalabels.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-gridlines-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-legend-access.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-legend-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-marker-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-plot-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-point-access.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-point-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-replace-data.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-series.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-ticklabels-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/dml-color.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/dml-effect.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/dml-fill.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/dml-line.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/environment.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/ph-inherit-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/ph-insert-shape.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/ph-phfmt-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/ph-placeholder-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/prs-coreprops.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/prs-default-template.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/prs-open-save.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/prs-presentation-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-autoshape.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-connector.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-freeform.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-graphicframe.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-groupshape.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-movie-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-picture.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-placeholder.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-shapes.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-shared.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/sld-background.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/sld-slide.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/sld-slides.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/action.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/axis.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/background.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/category.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/chart.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/chartdata.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/color.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/coreprops.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/datalabel.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/effect.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/fill.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/font.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/font_color.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/helpers.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/legend.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/line.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/picture.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/placeholder.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/plot.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/presentation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/series.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/shape.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/shapes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/slide.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/slides.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/table.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/72-dpi.tiff +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/act-props.pptm +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/calibriz.ttf +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-category-access.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-charts.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-legend.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-point-access.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-point-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-series.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/dml-effect.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/dml-fill.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/dml-line.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/ext-rels.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/font-color.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/just-two-mice.png +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/minimal.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/monty-truth.png +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/mst-shapes.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/pic.emf +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/prs-notes.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/prs-properties.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/python-icon.jpeg +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/python-powered.png +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/python.bmp +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-common-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-freeform.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-picture.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-shapes.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-background.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-blank.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-notes.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-slide.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-slides.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sonic.gif +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/tbl-cell.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/test.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-font-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-text.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/text.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/text_frame.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/tbl-cell.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/tbl-column.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/tbl-table.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-fit-text.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-font-color.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-font-props.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-paragraph.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-text.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-textframe.feature +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/pyproject.toml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/setup.cfg +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_color.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_slide_importer.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_svg.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_template_applier.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_textstyle.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/accessibility.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/action.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/animation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/api.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/audit.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/analytics.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/axis.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/category.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/chart.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/data.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/datalabel.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/legend.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/marker.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/palettes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/plot.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/point.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/quick_layouts.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/series.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/xlsx.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/xmlwriter.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/compose/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/compose/from_spec.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/components.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/figures.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/layout.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/recipes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/style.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/tokens.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/diagrams.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/chtfmt.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/color.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/effect.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/fill.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/line.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/picture.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/three_d.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/action.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/animation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/base.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/chart.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/dml.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/lang.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/presentation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/shapes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/text.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/exc.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/formats.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/geometry.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/inherit.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/lint.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/math.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/mathml2omml.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/media.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/constants.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/oxml.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/package.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/packuri.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/serialized.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/shared.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/spec.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/action.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/axis.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/chart.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/legend.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/marker.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/plot.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/series.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/shared.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/coreprops.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/customprops.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/color.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/effect.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/fill.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/line.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/three_d.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/ns.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/presentation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/connector.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/picture.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/shared.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/simpletypes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/slide.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/table.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/text.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/theme.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/xmlchemy.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/package.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/chart.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/coreprops.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/customprops.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/diagram.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/embeddedpackage.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/image.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/media.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/presentation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/slide.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/presentation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/py.typed +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/render.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/section.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/autoshape.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/base.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/connector.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/freeform.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/graphfrm.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/group.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/picture.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/placeholder.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shared.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/SKILL.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/__main__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/animations.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/charts.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/compose.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/design.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/effects.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/lint.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/math.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/picture-effects.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/render.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/smart-art.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/tables.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/theme.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/three-d.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/transitions.md +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/slide.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/smart_art.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/spec.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/table.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/table_styles.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/default.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/docx-icon.emf +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/generic-icon.emf +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/notes.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/notesMaster.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/pptx-icon.emf +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/theme.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/text/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/text/fonts.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/text/layout.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/text/text.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/theme.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/types.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/util.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/entry_points.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/requires.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/top_level.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_analytics.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_axis.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_category.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_chart.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_chart_toggles.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_collision_strategy.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_data.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_datalabel.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_legend.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_marker.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_palettes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_plot.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_point.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_quick_layouts.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_series.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_xlsx.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_xmlwriter.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_components.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_figures.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_layout.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_recipes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_style.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_tokens.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_chtfmt.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_color.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_effect.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_fill.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_line.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_three_d.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/enum/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/enum/test_base.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/enum/test_shapes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/round_trip.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_add_slide_layout.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_apply_template.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_compose_package.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_import_slide.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_round_trip.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/test_oxml.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/test_package.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/test_packuri.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/test_serialized.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/test_autoshape.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/test_groupshape.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/test_picture.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test___init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_dml.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_ns.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_presentation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_simpletypes.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_slide.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_table.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_theme.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_xmlchemy.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/unitdata/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/unitdata/dml.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/unitdata/shape.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/unitdata/text.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_chart.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_coreprops.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_customprops.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_embeddedpackage.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_image.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_media.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_presentation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_slide.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/schema/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/schema/oxml_schema_validator.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/schema/test_schema_validity.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_anchor.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_animate.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_autoshape.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_base.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_connector.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_freeform.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_graphfrm.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_group.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_picture.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_placeholder.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_shapetree.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_accessibility.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_action.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_animation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_api.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_audit.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_compose_from_spec.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_diagrams.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/calibriz.ttf +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/cdw-logo.eps +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/dummy.mp4 +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/minimal.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/minimal_slide.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/missing_rels_item.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/monty-truth.png +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/no-core-props.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/no-slides.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/presentation.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/python-icon.jpeg +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/python-powered.png +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/python.bmp +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/slideLayout1.xml +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/cat-labels.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/default-notes.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/default-theme.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/freeform.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/placeholders.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/relationships.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/timing.txt +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/test.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/test_slides.pptx +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_formats.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_geometry.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_inherit.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_lint.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_lint_on_save.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_math.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_media.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_new_features.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_package.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_pathlike_inputs.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_powerpoint_strict_validation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_presentation.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_render.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_render_slides_alias.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_section.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_shared.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_skill.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_slide.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_smart_art.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_svg_picture.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_table.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_table_extras.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_theme.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_transition_morph.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_util.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/text/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/text/test_fonts.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/text/test_layout.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/text/test_text.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitdata.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitutil/__init__.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitutil/cxml.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitutil/file.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitutil/mock.py +0 -0
- {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tox.ini +0 -0
|
@@ -15,6 +15,25 @@ 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.18.0 (2026-08-30)
|
|
19
|
+
+++++++++++++++++++
|
|
20
|
+
|
|
21
|
+
Added
|
|
22
|
+
.....
|
|
23
|
+
|
|
24
|
+
* **Agent-friendly kwargs** on the one-call helpers. ``add_text()``,
|
|
25
|
+
``add_equation()``, and ``add_arrow()`` now absorb cross-library
|
|
26
|
+
keyword spellings — matplotlib's ``ha`` / ``va`` / ``fontsize`` /
|
|
27
|
+
``fontfamily``, CSS-flavored ``halign`` / ``text_color``, British
|
|
28
|
+
``colour``, ``x`` / ``y`` / ``w`` / ``h`` geometry keywords,
|
|
29
|
+
``begin`` / ``to`` arrow endpoints, and more — plus unambiguous
|
|
30
|
+
near-misses (``algn`` → ``align``). Synonyms substitute, never
|
|
31
|
+
contradict: two different values for the same logical argument still
|
|
32
|
+
raise. A genuinely unknown kwarg raises a ``TypeError`` that lists
|
|
33
|
+
every accepted argument, so a model reading the traceback
|
|
34
|
+
self-corrects in one step.
|
|
35
|
+
|
|
36
|
+
|
|
18
37
|
2.17.0 (2026-08-30)
|
|
19
38
|
+++++++++++++++++++
|
|
20
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-pptx2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.18.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
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""Agent-friendly kwarg normalization for the one-call shape helpers.
|
|
2
|
+
|
|
3
|
+
Code generators (LLM-trained models among them) reliably spell keyword
|
|
4
|
+
arguments the way *other* libraries spell them — matplotlib's
|
|
5
|
+
``fontfamily``/``fontsize``/``ha``/``va``, CSS-flavored ``text-align``,
|
|
6
|
+
``colour`` — and die on ``TypeError: unexpected keyword argument``. This
|
|
7
|
+
module absorbs that whole error class for the ergonomic helpers
|
|
8
|
+
(``add_text`` / ``add_equation`` / ``add_arrow``) in three layers:
|
|
9
|
+
|
|
10
|
+
1. **Synonyms** — a fixed map from common spellings onto each canonical
|
|
11
|
+
argument (``halign`` → ``align``, ``font_size`` → ``size_pt`` …).
|
|
12
|
+
2. **Fuzzy matching** — a near-miss kwarg (``algn``, ``colr``) is resolved
|
|
13
|
+
to its closest canonical or synonym when unambiguous.
|
|
14
|
+
3. **Didactic errors** — anything still unknown raises a ``TypeError``
|
|
15
|
+
that names the closest candidate and lists every accepted kwarg, so a
|
|
16
|
+
model reading the traceback self-corrects in one step.
|
|
17
|
+
|
|
18
|
+
An alias may *substitute* for its canonical but never contradict it:
|
|
19
|
+
passing two different values for the same logical argument is a genuine
|
|
20
|
+
caller bug and still raises.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
import difflib
|
|
26
|
+
|
|
27
|
+
# Canonical kwarg -> spellings other ecosystems use for the same thing.
|
|
28
|
+
SYNONYMS: dict[str, tuple[str, ...]] = {
|
|
29
|
+
"text": ("txt", "string", "content", "label", "caption", "value"),
|
|
30
|
+
"font": ("font_family", "fontfamily", "font_name", "fontname", "typeface", "family", "face"),
|
|
31
|
+
"size_pt": ("size", "font_size", "fontsize", "pt_size", "point_size"),
|
|
32
|
+
"align": ("halign", "ha", "horizontal_align", "horizontal_alignment", "text_align", "text_alignment"),
|
|
33
|
+
"anchor": ("valign", "va", "vertical_align", "vertical_alignment", "v_align"),
|
|
34
|
+
"color": (
|
|
35
|
+
"colour",
|
|
36
|
+
"font_color",
|
|
37
|
+
"font_colour",
|
|
38
|
+
"text_color",
|
|
39
|
+
"text_colour",
|
|
40
|
+
"fg_color",
|
|
41
|
+
"line_color",
|
|
42
|
+
"stroke_color",
|
|
43
|
+
),
|
|
44
|
+
"weight_pt": ("weight", "line_weight", "width_pt", "stroke_width"),
|
|
45
|
+
"bold": ("font_bold", "is_bold"),
|
|
46
|
+
"italic": ("font_italic", "is_italic", "oblique"),
|
|
47
|
+
"word_wrap": ("wrap", "wrap_text", "text_wrap"),
|
|
48
|
+
"margin_pt": ("margin", "padding", "padding_pt", "inset", "inset_pt"),
|
|
49
|
+
"latex": ("tex", "formula", "equation", "expression", "math"),
|
|
50
|
+
"left": ("x",),
|
|
51
|
+
"top": ("y",),
|
|
52
|
+
"width": ("w",),
|
|
53
|
+
"height": ("h",),
|
|
54
|
+
"start": ("begin", "start_point", "start_shape", "from", "source"),
|
|
55
|
+
"end": ("to", "end_point", "end_shape", "target"),
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
_ALIAS_TO_CANONICAL: dict[str, str] = {
|
|
59
|
+
alias: canonical
|
|
60
|
+
for canonical, aliases in SYNONYMS.items()
|
|
61
|
+
for alias in aliases
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
_FUZZY_CUTOFF = 0.85
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _did_you_mean(name: str, candidates: list[str], known: "list[str] | tuple[str, ...]") -> str | None:
|
|
68
|
+
"""Return the canonical arg *name* points at, or None.
|
|
69
|
+
|
|
70
|
+
Near-misses that hit both a canonical and one of its own aliases
|
|
71
|
+
(``algn`` → ``align`` and ``halign``) are NOT ambiguous — they agree —
|
|
72
|
+
so candidates are collapsed to their canonical form before the
|
|
73
|
+
ambiguity check.
|
|
74
|
+
"""
|
|
75
|
+
if not candidates:
|
|
76
|
+
return None
|
|
77
|
+
matches = difflib.get_close_matches(name, candidates, n=3, cutoff=_FUZZY_CUTOFF)
|
|
78
|
+
distinct = set()
|
|
79
|
+
for m in matches:
|
|
80
|
+
canonical = m if m in known else _ALIAS_TO_CANONICAL.get(m)
|
|
81
|
+
if canonical in known:
|
|
82
|
+
distinct.add(canonical)
|
|
83
|
+
if len(distinct) == 1:
|
|
84
|
+
return distinct.pop()
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def absorb_agent_kwargs(
|
|
89
|
+
method: str,
|
|
90
|
+
kwargs: dict,
|
|
91
|
+
canonical_names: "list[str] | tuple[str, ...]",
|
|
92
|
+
) -> dict:
|
|
93
|
+
"""Map alias / near-miss *kwargs* onto canonical names; raise else.
|
|
94
|
+
|
|
95
|
+
*canonical_names* lists the kwargs the method actually understands
|
|
96
|
+
(including any already-bound explicit parameters). Returns a dict
|
|
97
|
+
containing only canonical names. A synonym that matches a canonical
|
|
98
|
+
the caller already supplied with a *different* value raises
|
|
99
|
+
``TypeError``; equal values are fine.
|
|
100
|
+
"""
|
|
101
|
+
known = list(canonical_names)
|
|
102
|
+
alias_space = [a for a in _ALIAS_TO_CANONICAL if a not in known]
|
|
103
|
+
candidates = known + alias_space
|
|
104
|
+
|
|
105
|
+
resolved: dict = {}
|
|
106
|
+
for name, value in kwargs.items():
|
|
107
|
+
if name in known or name in resolved:
|
|
108
|
+
if name in resolved and resolved[name] != value:
|
|
109
|
+
raise TypeError(
|
|
110
|
+
f"{method}(): got {name!r} twice with different values "
|
|
111
|
+
f"({resolved[name]!r} vs {value!r})"
|
|
112
|
+
)
|
|
113
|
+
resolved[name] = value
|
|
114
|
+
continue
|
|
115
|
+
canonical = _ALIAS_TO_CANONICAL.get(name)
|
|
116
|
+
if canonical is not None and canonical not in known:
|
|
117
|
+
# The alias resolves to an argument this method doesn't take
|
|
118
|
+
# (e.g. ``to=`` on add_text); fall through to the fuzzy/error
|
|
119
|
+
# path rather than silently dropping the value.
|
|
120
|
+
canonical = None
|
|
121
|
+
if canonical is None:
|
|
122
|
+
canonical = _did_you_mean(name, candidates, known)
|
|
123
|
+
if canonical is None:
|
|
124
|
+
raise TypeError(
|
|
125
|
+
f"{method}(): got an unexpected keyword argument {name!r}. "
|
|
126
|
+
f"Accepted: {', '.join(sorted(known))} "
|
|
127
|
+
f"(synonyms like font_family/halign/valign/colour are fine)"
|
|
128
|
+
)
|
|
129
|
+
if canonical in resolved and resolved[canonical] != value:
|
|
130
|
+
raise TypeError(
|
|
131
|
+
f"{method}(): {name!r} and the value already given for "
|
|
132
|
+
f"{canonical!r} disagree ({value!r} vs {resolved[canonical]!r}); "
|
|
133
|
+
f"pass one spelling only"
|
|
134
|
+
)
|
|
135
|
+
resolved[canonical] = value
|
|
136
|
+
return resolved
|
|
@@ -557,24 +557,6 @@ class _BaseShapes(ParentedElementProxy):
|
|
|
557
557
|
return BaseShapeFactory(shape_elm, self)
|
|
558
558
|
|
|
559
559
|
|
|
560
|
-
def _resolve_alias(method: str, arg: str, canonical, alias):
|
|
561
|
-
"""Return *canonical*, falling back to its *alias* kwarg (both nullable).
|
|
562
|
-
|
|
563
|
-
Code generators (matplotlib-trained models among them) habitually spell
|
|
564
|
-
``font`` as ``font_family`` and ``anchor`` as ``valign``; accepting the
|
|
565
|
-
alias removes a whole class of one-keyword-away TypeErrors. Passing
|
|
566
|
-
both with different values is a genuine caller bug and still raises.
|
|
567
|
-
"""
|
|
568
|
-
if canonical is not None:
|
|
569
|
-
if alias is not None and alias != canonical:
|
|
570
|
-
raise TypeError(
|
|
571
|
-
f"{method}(): pass either {arg}= or its alias, not two "
|
|
572
|
-
f"different values ({canonical!r} vs {alias!r})"
|
|
573
|
-
)
|
|
574
|
-
return canonical
|
|
575
|
-
return alias
|
|
576
|
-
|
|
577
|
-
|
|
578
560
|
class _BaseGroupShapes(_BaseShapes):
|
|
579
561
|
"""Base class for shape-trees that can add shapes."""
|
|
580
562
|
|
|
@@ -918,53 +900,115 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
918
900
|
*bbox_or_positional,
|
|
919
901
|
text: str = "",
|
|
920
902
|
font: str | None = None,
|
|
921
|
-
font_family: str | None = None,
|
|
922
903
|
size_pt: float | None = None,
|
|
923
904
|
bold: bool | None = None,
|
|
924
905
|
italic: bool | None = None,
|
|
925
906
|
color=None,
|
|
926
907
|
align: str | None = None,
|
|
927
908
|
anchor: str | None = None,
|
|
928
|
-
valign: str | None = None,
|
|
929
909
|
margin_pt: float | tuple[float, float, float, float] | None = None,
|
|
930
910
|
word_wrap: bool | None = True,
|
|
911
|
+
**kwargs,
|
|
931
912
|
) -> Shape:
|
|
932
913
|
"""Add a textbox carrying *text* with one-call styling.
|
|
933
914
|
|
|
934
|
-
Accepts either a :class:`~pptx2.geometry.BBox` positionally
|
|
935
|
-
|
|
915
|
+
Accepts either a :class:`~pptx2.geometry.BBox` positionally, the
|
|
916
|
+
four ``(left, top, width, height)`` lengths positionally, *or* the
|
|
917
|
+
same four as keyword arguments (``x`` / ``y`` / ``w`` / ``h``
|
|
918
|
+
synonyms included)::
|
|
936
919
|
|
|
937
920
|
slide.shapes.add_text(bbox, text="Hello", size_pt=24, bold=True,
|
|
938
921
|
color="#0B5CFF", align="center")
|
|
939
922
|
slide.shapes.add_text(Inches(1), Inches(2), Inches(4), Inches(1),
|
|
940
923
|
text="Hello")
|
|
924
|
+
slide.shapes.add_text(x=Inches(1), y=Inches(2), w=Inches(4),
|
|
925
|
+
h=Inches(1), text="Hello")
|
|
941
926
|
|
|
942
927
|
Keyword args:
|
|
943
928
|
|
|
929
|
+
* ``text`` — the string (``label`` / ``content`` synonyms work).
|
|
944
930
|
* ``font`` — typeface name (e.g. ``"Inter"``); ``None`` inherits.
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
* ``size_pt`` — font size in points; ``None`` inherits.
|
|
931
|
+
* ``size_pt`` — font size in points (synonyms: ``size``,
|
|
932
|
+
``font_size``, ``fontsize``).
|
|
948
933
|
* ``bold`` / ``italic`` — ``True``/``False``/``None``.
|
|
949
934
|
* ``color`` — any "color-like" (``"#RRGGBB"``, ``RGBColor``,
|
|
950
|
-
``(r, g, b)``).
|
|
935
|
+
``(r, g, b)``); ``colour`` / ``text_color`` synonyms work.
|
|
951
936
|
* ``align`` — ``"left"`` / ``"center"`` / ``"right"`` /
|
|
952
|
-
``"justify"``; ``
|
|
937
|
+
``"justify"``; ``halign`` is a synonym.
|
|
953
938
|
* ``anchor`` — vertical anchor: ``"top"`` / ``"middle"`` (also
|
|
954
|
-
``"mid"`` / ``"center"``) / ``"bottom"``; ``
|
|
955
|
-
|
|
939
|
+
``"mid"`` / ``"center"``) / ``"bottom"``; ``valign`` is a
|
|
940
|
+
synonym.
|
|
956
941
|
* ``margin_pt`` — uniform margin in points, or a 4-tuple
|
|
957
942
|
``(top, right, bottom, left)``.
|
|
958
943
|
* ``word_wrap`` — defaults to ``True``.
|
|
959
944
|
|
|
945
|
+
Misspelled or cross-library kwargs are absorbed when unambiguous
|
|
946
|
+
(``font_family`` → ``font``, ``fontsize`` → ``size_pt``, ``algn``
|
|
947
|
+
→ ``align`` …); anything unrecognizable raises a ``TypeError``
|
|
948
|
+
naming the accepted arguments.
|
|
949
|
+
|
|
960
950
|
Returns the textbox :class:`Shape` so further mutation works as
|
|
961
951
|
normal.
|
|
962
952
|
"""
|
|
953
|
+
from pptx2._agent_friendly import absorb_agent_kwargs
|
|
963
954
|
from pptx2._textstyle import apply_margins, apply_text_style, coerce_anchor
|
|
964
955
|
from pptx2.geometry import BBox
|
|
965
956
|
|
|
966
|
-
|
|
967
|
-
|
|
957
|
+
if kwargs:
|
|
958
|
+
kwargs = absorb_agent_kwargs(
|
|
959
|
+
"add_text",
|
|
960
|
+
kwargs,
|
|
961
|
+
(
|
|
962
|
+
"text", "font", "size_pt", "bold", "italic", "color",
|
|
963
|
+
"align", "anchor", "margin_pt", "word_wrap",
|
|
964
|
+
"left", "top", "width", "height",
|
|
965
|
+
),
|
|
966
|
+
)
|
|
967
|
+
geo_names = ("left", "top", "width", "height")
|
|
968
|
+
if any(g in kwargs for g in geo_names):
|
|
969
|
+
if bbox_or_positional:
|
|
970
|
+
raise TypeError(
|
|
971
|
+
"add_text(): got both positional geometry and geometry "
|
|
972
|
+
"keyword arguments; pass one form only"
|
|
973
|
+
)
|
|
974
|
+
if not all(g in kwargs for g in geo_names):
|
|
975
|
+
missing = [g for g in geo_names if g not in kwargs]
|
|
976
|
+
raise TypeError(
|
|
977
|
+
"add_text(): geometry keywords need all of "
|
|
978
|
+
f"left/top/width/height; missing {', '.join(missing)}"
|
|
979
|
+
)
|
|
980
|
+
bbox_or_positional = tuple(kwargs[g] for g in geo_names)
|
|
981
|
+
defaults = {
|
|
982
|
+
"text": "", "font": None, "size_pt": None, "bold": None,
|
|
983
|
+
"italic": None, "color": None, "align": None, "anchor": None,
|
|
984
|
+
"margin_pt": None, "word_wrap": True,
|
|
985
|
+
}
|
|
986
|
+
given = {
|
|
987
|
+
"text": text, "font": font, "size_pt": size_pt, "bold": bold,
|
|
988
|
+
"italic": italic, "color": color, "align": align,
|
|
989
|
+
"anchor": anchor, "margin_pt": margin_pt,
|
|
990
|
+
"word_wrap": word_wrap,
|
|
991
|
+
}
|
|
992
|
+
for name in defaults:
|
|
993
|
+
if name not in kwargs:
|
|
994
|
+
continue
|
|
995
|
+
value = kwargs[name]
|
|
996
|
+
if given[name] != defaults[name] and given[name] != value:
|
|
997
|
+
raise TypeError(
|
|
998
|
+
f"add_text(): {name!r} given twice with different "
|
|
999
|
+
f"values ({given[name]!r} vs {value!r})"
|
|
1000
|
+
)
|
|
1001
|
+
given[name] = value
|
|
1002
|
+
text = given["text"]
|
|
1003
|
+
font = given["font"]
|
|
1004
|
+
size_pt = given["size_pt"]
|
|
1005
|
+
bold = given["bold"]
|
|
1006
|
+
italic = given["italic"]
|
|
1007
|
+
color = given["color"]
|
|
1008
|
+
align = given["align"]
|
|
1009
|
+
anchor = given["anchor"]
|
|
1010
|
+
margin_pt = given["margin_pt"]
|
|
1011
|
+
word_wrap = given["word_wrap"]
|
|
968
1012
|
|
|
969
1013
|
if len(bbox_or_positional) == 1 and isinstance(bbox_or_positional[0], BBox):
|
|
970
1014
|
box = bbox_or_positional[0]
|
|
@@ -1009,21 +1053,21 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
1009
1053
|
def add_equation(
|
|
1010
1054
|
self,
|
|
1011
1055
|
*bbox_or_positional,
|
|
1012
|
-
latex: str,
|
|
1056
|
+
latex: str | None = None,
|
|
1013
1057
|
display: bool = True,
|
|
1014
1058
|
font: str | None = None,
|
|
1015
|
-
font_family: str | None = None,
|
|
1016
1059
|
size_pt: float | None = None,
|
|
1017
1060
|
color=None,
|
|
1018
1061
|
align: str | None = "center",
|
|
1019
1062
|
anchor: str | None = "middle",
|
|
1020
|
-
valign: str | None = None,
|
|
1021
1063
|
margin_pt: float | tuple[float, float, float, float] | None = None,
|
|
1064
|
+
**kwargs,
|
|
1022
1065
|
) -> Shape:
|
|
1023
1066
|
"""Add a text box containing a native PowerPoint equation from LaTeX.
|
|
1024
1067
|
|
|
1025
|
-
Accepts either a :class:`~pptx2.geometry.BBox
|
|
1026
|
-
``(left, top, width, height)
|
|
1068
|
+
Accepts either a :class:`~pptx2.geometry.BBox`, the four
|
|
1069
|
+
``(left, top, width, height)`` lengths positionally, or the same
|
|
1070
|
+
four as keyword arguments (``x`` / ``y`` / ``w`` / ``h`` included)::
|
|
1027
1071
|
|
|
1028
1072
|
slide.shapes.add_equation(bbox, latex=r"\\frac{a}{b}", size_pt=28)
|
|
1029
1073
|
slide.shapes.add_equation(
|
|
@@ -1036,16 +1080,74 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
1036
1080
|
equation editor.
|
|
1037
1081
|
|
|
1038
1082
|
Keyword args match :meth:`add_text` for *font* / *size_pt* /
|
|
1039
|
-
*color* / *align* / *anchor* / *margin_pt*
|
|
1040
|
-
``
|
|
1041
|
-
|
|
1042
|
-
|
|
1083
|
+
*color* / *align* / *anchor* / *margin_pt*, and *latex* accepts
|
|
1084
|
+
the ``tex`` / ``formula`` / ``equation`` synonyms. Misspelled or
|
|
1085
|
+
cross-library kwargs are absorbed when unambiguous (see
|
|
1086
|
+
:meth:`add_text`). *display* (default |True|) emits a display-math
|
|
1087
|
+
paragraph; set |False| for inline OMML.
|
|
1043
1088
|
"""
|
|
1089
|
+
from pptx2._agent_friendly import absorb_agent_kwargs
|
|
1044
1090
|
from pptx2._textstyle import apply_margins, coerce_align, coerce_anchor
|
|
1045
1091
|
from pptx2.geometry import BBox
|
|
1046
1092
|
|
|
1047
|
-
|
|
1048
|
-
|
|
1093
|
+
if kwargs:
|
|
1094
|
+
kwargs = absorb_agent_kwargs(
|
|
1095
|
+
"add_equation",
|
|
1096
|
+
kwargs,
|
|
1097
|
+
(
|
|
1098
|
+
"latex", "display", "font", "size_pt", "color", "align",
|
|
1099
|
+
"anchor", "margin_pt", "left", "top", "width", "height",
|
|
1100
|
+
),
|
|
1101
|
+
)
|
|
1102
|
+
geo_names = ("left", "top", "width", "height")
|
|
1103
|
+
if any(g in kwargs for g in geo_names):
|
|
1104
|
+
if bbox_or_positional:
|
|
1105
|
+
raise TypeError(
|
|
1106
|
+
"add_equation(): got both positional geometry and "
|
|
1107
|
+
"geometry keyword arguments; pass one form only"
|
|
1108
|
+
)
|
|
1109
|
+
if not all(g in kwargs for g in geo_names):
|
|
1110
|
+
missing = [g for g in geo_names if g not in kwargs]
|
|
1111
|
+
raise TypeError(
|
|
1112
|
+
"add_equation(): geometry keywords need all of "
|
|
1113
|
+
f"left/top/width/height; missing {', '.join(missing)}"
|
|
1114
|
+
)
|
|
1115
|
+
bbox_or_positional = tuple(kwargs[g] for g in geo_names)
|
|
1116
|
+
defaults = {
|
|
1117
|
+
"latex": None, "display": True, "font": None, "size_pt": None,
|
|
1118
|
+
"color": None, "align": "center", "anchor": "middle",
|
|
1119
|
+
"margin_pt": None,
|
|
1120
|
+
}
|
|
1121
|
+
given = {
|
|
1122
|
+
"latex": latex, "display": display, "font": font,
|
|
1123
|
+
"size_pt": size_pt, "color": color, "align": align,
|
|
1124
|
+
"anchor": anchor, "margin_pt": margin_pt,
|
|
1125
|
+
}
|
|
1126
|
+
for name in defaults:
|
|
1127
|
+
if name not in kwargs:
|
|
1128
|
+
continue
|
|
1129
|
+
value = kwargs[name]
|
|
1130
|
+
if given[name] != defaults[name] and given[name] != value:
|
|
1131
|
+
raise TypeError(
|
|
1132
|
+
f"add_equation(): {name!r} given twice with different "
|
|
1133
|
+
f"values ({given[name]!r} vs {value!r})"
|
|
1134
|
+
)
|
|
1135
|
+
given[name] = value
|
|
1136
|
+
latex = given["latex"]
|
|
1137
|
+
display = given["display"]
|
|
1138
|
+
font = given["font"]
|
|
1139
|
+
size_pt = given["size_pt"]
|
|
1140
|
+
color = given["color"]
|
|
1141
|
+
align = given["align"]
|
|
1142
|
+
anchor = given["anchor"]
|
|
1143
|
+
margin_pt = given["margin_pt"]
|
|
1144
|
+
|
|
1145
|
+
if latex is None:
|
|
1146
|
+
raise TypeError(
|
|
1147
|
+
"add_equation() missing required argument: 'latex' "
|
|
1148
|
+
"(synonyms 'tex' / 'formula' / 'equation' accepted)"
|
|
1149
|
+
)
|
|
1150
|
+
|
|
1049
1151
|
|
|
1050
1152
|
if len(bbox_or_positional) == 1 and isinstance(bbox_or_positional[0], BBox):
|
|
1051
1153
|
box = bbox_or_positional[0]
|
|
@@ -1080,8 +1182,8 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
1080
1182
|
|
|
1081
1183
|
def add_arrow(
|
|
1082
1184
|
self,
|
|
1083
|
-
start,
|
|
1084
|
-
end,
|
|
1185
|
+
start=None,
|
|
1186
|
+
end=None,
|
|
1085
1187
|
*,
|
|
1086
1188
|
head: str | None = "triangle",
|
|
1087
1189
|
tail: str | None = None,
|
|
@@ -1094,6 +1196,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
1094
1196
|
inset_pt: float = 0.0,
|
|
1095
1197
|
end_side: str = "auto",
|
|
1096
1198
|
start_side: str = "auto",
|
|
1199
|
+
**kwargs,
|
|
1097
1200
|
) -> Connector:
|
|
1098
1201
|
"""Add an arrow connector with proper arrowhead and inset routing.
|
|
1099
1202
|
|
|
@@ -1116,12 +1219,18 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
1116
1219
|
|
|
1117
1220
|
``style`` is ``"solid"`` / ``"dashed"`` / ``"dotted"``.
|
|
1118
1221
|
|
|
1119
|
-
``route`` is ``"straight"`` (default), ``"elbow"``, or
|
|
1120
|
-
|
|
1222
|
+
``route`` is ``"straight"`` (default), ``"elbow"``, or ``"curved"``
|
|
1223
|
+
— picks the underlying
|
|
1121
1224
|
:class:`~pptx2.enum.shapes.MSO_CONNECTOR_TYPE`.
|
|
1122
1225
|
|
|
1226
|
+
Keyword synonyms are absorbed: ``begin`` / ``from`` / ``source``
|
|
1227
|
+
for ``start``, ``to`` / ``target`` for ``end``, ``stroke_color`` /
|
|
1228
|
+
``colour`` for ``color``, ``weight`` / ``line_weight`` for
|
|
1229
|
+
``weight_pt`` — see :meth:`add_text` for the full aliasing story.
|
|
1230
|
+
|
|
1123
1231
|
Returns the :class:`Connector` so callers can tweak further.
|
|
1124
1232
|
"""
|
|
1233
|
+
from pptx2._agent_friendly import absorb_agent_kwargs
|
|
1125
1234
|
from pptx2._color import coerce_color
|
|
1126
1235
|
from pptx2.enum.dml import (
|
|
1127
1236
|
MSO_LINE_DASH_STYLE,
|
|
@@ -1131,6 +1240,64 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
1131
1240
|
from pptx2.enum.shapes import MSO_CONNECTOR_TYPE
|
|
1132
1241
|
from pptx2.util import Pt
|
|
1133
1242
|
|
|
1243
|
+
if kwargs:
|
|
1244
|
+
kwargs = absorb_agent_kwargs(
|
|
1245
|
+
"add_arrow",
|
|
1246
|
+
kwargs,
|
|
1247
|
+
(
|
|
1248
|
+
"start", "end", "head", "tail", "head_size", "tail_size",
|
|
1249
|
+
"color", "weight_pt", "style", "route", "inset_pt",
|
|
1250
|
+
"end_side", "start_side",
|
|
1251
|
+
),
|
|
1252
|
+
)
|
|
1253
|
+
defaults = {
|
|
1254
|
+
"head": "triangle", "tail": None, "head_size": "medium",
|
|
1255
|
+
"tail_size": "medium", "color": None, "weight_pt": 1.5,
|
|
1256
|
+
"style": "solid", "route": "straight", "inset_pt": 0.0,
|
|
1257
|
+
"end_side": "auto", "start_side": "auto",
|
|
1258
|
+
}
|
|
1259
|
+
given = {
|
|
1260
|
+
"head": head, "tail": tail, "head_size": head_size,
|
|
1261
|
+
"tail_size": tail_size, "color": color, "weight_pt": weight_pt,
|
|
1262
|
+
"style": style, "route": route, "inset_pt": inset_pt,
|
|
1263
|
+
"end_side": end_side, "start_side": start_side,
|
|
1264
|
+
}
|
|
1265
|
+
for name in defaults:
|
|
1266
|
+
if name not in kwargs:
|
|
1267
|
+
continue
|
|
1268
|
+
value = kwargs[name]
|
|
1269
|
+
if given[name] != defaults[name] and given[name] != value:
|
|
1270
|
+
raise TypeError(
|
|
1271
|
+
f"add_arrow(): {name!r} given twice with different "
|
|
1272
|
+
f"values ({given[name]!r} vs {value!r})"
|
|
1273
|
+
)
|
|
1274
|
+
given[name] = value
|
|
1275
|
+
head = given["head"]
|
|
1276
|
+
tail = given["tail"]
|
|
1277
|
+
head_size = given["head_size"]
|
|
1278
|
+
tail_size = given["tail_size"]
|
|
1279
|
+
color = given["color"]
|
|
1280
|
+
weight_pt = given["weight_pt"]
|
|
1281
|
+
style = given["style"]
|
|
1282
|
+
route = given["route"]
|
|
1283
|
+
inset_pt = given["inset_pt"]
|
|
1284
|
+
end_side = given["end_side"]
|
|
1285
|
+
start_side = given["start_side"]
|
|
1286
|
+
# start/end synonyms (from=/to=/begin=/source=/target=)
|
|
1287
|
+
if "start" in kwargs:
|
|
1288
|
+
start = kwargs["start"]
|
|
1289
|
+
if "end" in kwargs:
|
|
1290
|
+
end = kwargs["end"]
|
|
1291
|
+
if start is None or end is None:
|
|
1292
|
+
raise TypeError(
|
|
1293
|
+
"add_arrow() missing required argument(s): "
|
|
1294
|
+
+ ", ".join(
|
|
1295
|
+
name for name, value in (("start", start), ("end", end))
|
|
1296
|
+
if value is None
|
|
1297
|
+
)
|
|
1298
|
+
+ " (synonyms begin/from/source and to/target accepted)"
|
|
1299
|
+
)
|
|
1300
|
+
|
|
1134
1301
|
_CONNECTOR = {
|
|
1135
1302
|
"straight": MSO_CONNECTOR_TYPE.STRAIGHT,
|
|
1136
1303
|
"elbow": MSO_CONNECTOR_TYPE.ELBOW,
|
|
@@ -449,3 +449,12 @@ print(slide.notes) # "" when the slide has no notes
|
|
|
449
449
|
`start_slide_index` claims every slide from that position to the deck
|
|
450
450
|
end. `move` raises `IndexError` out of range; `reorder` raises
|
|
451
451
|
`ValueError` unless given a clean permutation.
|
|
452
|
+
|
|
453
|
+
### Forgiving keyword arguments
|
|
454
|
+
|
|
455
|
+
The one-call helpers (`add_text`, `add_equation`, `add_arrow`) absorb
|
|
456
|
+
cross-library and near-miss kwargs, so the `font_family=` / `halign=` /
|
|
457
|
+
`fontsize=` / `colour` / `x,y,w,h` / `begin,to` habits of other
|
|
458
|
+
ecosystems just work. Synonyms substitute, never contradict (two
|
|
459
|
+
different values for the same logical argument still raise), and a
|
|
460
|
+
truly unknown kwarg raises a `TypeError` listing every accepted name.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-pptx2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.18.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
|
|
@@ -200,6 +200,7 @@ features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml
|
|
|
200
200
|
features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels
|
|
201
201
|
features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml
|
|
202
202
|
src/pptx2/__init__.py
|
|
203
|
+
src/pptx2/_agent_friendly.py
|
|
203
204
|
src/pptx2/_color.py
|
|
204
205
|
src/pptx2/_slide_importer.py
|
|
205
206
|
src/pptx2/_svg.py
|
|
@@ -115,6 +115,70 @@ class DescribeAddText:
|
|
|
115
115
|
BBox.from_inches(0, 0, 4, 1), text="x", anchor="top", valign="bottom"
|
|
116
116
|
)
|
|
117
117
|
|
|
118
|
+
def it_absorbs_halign_font_size_and_colour_synonyms(self, slide):
|
|
119
|
+
from pptx2.enum.text import PP_PARAGRAPH_ALIGNMENT
|
|
120
|
+
|
|
121
|
+
tx = slide.shapes.add_text(
|
|
122
|
+
BBox.from_inches(1, 1, 4, 1),
|
|
123
|
+
text="Hi",
|
|
124
|
+
halign="center",
|
|
125
|
+
font_size=20,
|
|
126
|
+
colour="#FF0000",
|
|
127
|
+
)
|
|
128
|
+
run = tx.text_frame.paragraphs[0].runs[0]
|
|
129
|
+
assert tx.text_frame.paragraphs[0].alignment == PP_PARAGRAPH_ALIGNMENT.CENTER
|
|
130
|
+
assert run.font.size == Pt(20)
|
|
131
|
+
assert str(run.font.color.rgb) == "FF0000"
|
|
132
|
+
|
|
133
|
+
def it_absorbs_matplotlib_ha_va_and_label(self, slide):
|
|
134
|
+
from pptx2.enum.text import MSO_VERTICAL_ANCHOR
|
|
135
|
+
|
|
136
|
+
tx = slide.shapes.add_text(
|
|
137
|
+
BBox.from_inches(1, 1, 4, 1), label="Hi", ha="center", va="middle"
|
|
138
|
+
)
|
|
139
|
+
assert tx.text_frame.text == "Hi"
|
|
140
|
+
assert tx.text_frame.vertical_anchor == MSO_VERTICAL_ANCHOR.MIDDLE
|
|
141
|
+
|
|
142
|
+
def it_fuzzy_matches_near_miss_kwargs(self, slide):
|
|
143
|
+
from pptx2.enum.text import PP_PARAGRAPH_ALIGNMENT
|
|
144
|
+
|
|
145
|
+
tx = slide.shapes.add_text(BBox.from_inches(1, 1, 4, 1), text="x", algn="right")
|
|
146
|
+
assert tx.text_frame.paragraphs[0].alignment == PP_PARAGRAPH_ALIGNMENT.RIGHT
|
|
147
|
+
|
|
148
|
+
def it_accepts_geometry_keywords_and_xywh_shorts(self, slide):
|
|
149
|
+
tx = slide.shapes.add_text(
|
|
150
|
+
x=Inches(1), y=Inches(2), w=Inches(3), h=Inches(1), text="xywh"
|
|
151
|
+
)
|
|
152
|
+
assert (tx.left, tx.top, tx.width, tx.height) == (
|
|
153
|
+
Inches(1), Inches(2), Inches(3), Inches(1)
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
def it_rejects_unknown_kwargs_with_a_didactic_error(self, slide):
|
|
157
|
+
with pytest.raises(TypeError, match="totally_bogus.*Accepted"):
|
|
158
|
+
slide.shapes.add_text(
|
|
159
|
+
BBox.from_inches(1, 1, 4, 1), text="x", totally_bogus=1
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
def it_rejects_partial_geometry_keywords(self, slide):
|
|
163
|
+
with pytest.raises(TypeError, match="left/top/width/height"):
|
|
164
|
+
slide.shapes.add_text(x=Inches(1), y=Inches(2), text="partial")
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class DescribeAddArrowSynonyms:
|
|
168
|
+
def it_absorbs_begin_to_colour_and_weight(self, slide):
|
|
169
|
+
arrow = slide.shapes.add_arrow(
|
|
170
|
+
begin=(Inches(1), Inches(1)),
|
|
171
|
+
to=(Inches(3), Inches(1)),
|
|
172
|
+
colour="#00FF00",
|
|
173
|
+
weight=2.5,
|
|
174
|
+
)
|
|
175
|
+
assert arrow.begin_x == Inches(1)
|
|
176
|
+
assert arrow.end_x == Inches(3)
|
|
177
|
+
|
|
178
|
+
def it_still_accepts_positional_endpoints(self, slide):
|
|
179
|
+
arrow = slide.shapes.add_arrow((Inches(0), Inches(3)), (Inches(2), Inches(3)))
|
|
180
|
+
assert arrow.begin_x == Inches(0)
|
|
181
|
+
|
|
118
182
|
|
|
119
183
|
class DescribeSetTextPreservingFormat:
|
|
120
184
|
def it_preserves_font_attributes_across_replacement(self, slide):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|