ps-python-pptx 1.1.0__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ps_python_pptx-1.1.0/src/ps_python_pptx.egg-info → ps_python_pptx-1.3.0}/PKG-INFO +1 -1
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/__init__.py +1 -1
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/action.py +23 -0
- ps_python_pptx-1.3.0/src/pptx/background.py +198 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/action.py +2 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/slide.py +7 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/text/text.py +23 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0/src/ps_python_pptx.egg-info}/PKG-INFO +1 -1
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/ps_python_pptx.egg-info/SOURCES.txt +3 -0
- ps_python_pptx-1.3.0/tests/test_background_info.py +91 -0
- ps_python_pptx-1.3.0/tests/test_screen_tips.py +82 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/FORK.md +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/HISTORY.rst +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/LICENSE +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/MANIFEST.in +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/README.rst +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/act-action.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/act-hyperlink.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-axis-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-axistitle-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-category-access.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-category-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-chart.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-charttitle-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-data-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-datalabels.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-gridlines-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-legend-access.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-legend-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-marker-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-plot-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-point-access.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-point-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-replace-data.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-series.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/cht-ticklabels-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/dml-color.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/dml-effect.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/dml-fill.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/dml-line.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/environment.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/ph-inherit-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/ph-insert-shape.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/ph-phfmt-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/ph-placeholder-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/prs-coreprops.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/prs-default-template.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/prs-open-save.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/prs-presentation-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-alt-text.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-autoshape.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-connector.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-freeform.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-graphicframe.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-groupshape.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-movie-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-picture.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-placeholder.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-shapes.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/shp-shared.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/sld-background.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/sld-slide.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/sld-slides.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/action.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/axis.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/background.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/category.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/chart.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/chartdata.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/color.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/coreprops.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/datalabel.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/effect.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/fill.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/font.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/font_color.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/helpers.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/legend.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/line.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/picture.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/placeholder.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/plot.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/presentation.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/series.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/shape.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/shapes.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/slide.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/slides.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/table.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/72-dpi.tiff +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/act-props.pptm +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/calibriz.ttf +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-category-access.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-charts.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-legend.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-point-access.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-point-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-series.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/dml-effect.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/dml-fill.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/dml-line.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/ext-rels.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/font-color.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/just-two-mice.png +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/minimal.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/monty-truth.png +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/mst-shapes.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/pic.emf +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/prs-notes.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/prs-properties.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/python-icon.jpeg +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/python-powered.png +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/python.bmp +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-common-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-freeform.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-picture.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/shp-shapes.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/sld-background.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/sld-blank.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/sld-notes.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/sld-slide.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/sld-slides.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/sonic.gif +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/tbl-cell.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/test.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/txt-font-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/test_files/txt-text.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/text.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/steps/text_frame.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/tbl-cell.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/tbl-column.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/tbl-table.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/txt-fit-text.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/txt-font-color.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/txt-font-props.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/txt-paragraph.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/txt-text.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/features/txt-textframe.feature +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/pyproject.toml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/setup.cfg +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/api.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/axis.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/category.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/chart.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/data.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/datalabel.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/legend.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/marker.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/plot.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/point.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/series.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/xlsx.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/chart/xmlwriter.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/dml/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/dml/chtfmt.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/dml/color.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/dml/effect.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/dml/fill.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/dml/line.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/enum/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/enum/action.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/enum/base.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/enum/chart.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/enum/dml.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/enum/lang.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/enum/shapes.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/enum/text.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/exc.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/media.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/opc/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/opc/constants.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/opc/oxml.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/opc/package.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/opc/packuri.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/opc/serialized.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/opc/shared.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/opc/spec.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/axis.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/chart.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/datalabel.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/legend.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/marker.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/plot.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/series.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/chart/shared.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/coreprops.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/dml/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/dml/color.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/dml/fill.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/dml/line.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/ns.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/presentation.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/shapes/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/shapes/autoshape.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/shapes/connector.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/shapes/graphfrm.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/shapes/groupshape.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/shapes/picture.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/shapes/shared.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/simpletypes.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/slide.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/table.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/text.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/theme.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/oxml/xmlchemy.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/package.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/chart.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/coreprops.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/embeddedpackage.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/image.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/media.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/presentation.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/slide.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/parts/theme.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/presentation.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/py.typed +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/autoshape.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/base.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/connector.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/freeform.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/graphfrm.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/group.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/picture.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/placeholder.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shapes/shapetree.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/shared.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/spec.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/table.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/templates/default.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/templates/docx-icon.emf +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/templates/generic-icon.emf +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/templates/notes.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/templates/notesMaster.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/templates/pptx-icon.emf +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/templates/theme.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/templates/xlsx-icon.emf +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/text/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/text/fonts.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/text/layout.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/theme.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/types.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/pptx/util.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/ps_python_pptx.egg-info/dependency_links.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/ps_python_pptx.egg-info/requires.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/src/ps_python_pptx.egg-info/top_level.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_axis.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_category.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_chart.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_data.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_datalabel.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_legend.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_marker.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_plot.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_point.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_series.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_xlsx.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/chart/test_xmlwriter.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/dml/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/dml/test_chtfmt.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/dml/test_color.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/dml/test_effect.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/dml/test_fill.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/dml/test_line.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/enum/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/enum/test_base.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/enum/test_shapes.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/fork_wheel_smoke.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/opc/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/opc/test_oxml.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/opc/test_package.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/opc/test_packuri.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/opc/test_serialized.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/shapes/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/shapes/test_autoshape.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/shapes/test_groupshape.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/shapes/test_picture.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test___init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test_dml.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test_ns.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test_presentation.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test_simpletypes.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test_slide.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test_table.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test_theme.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/test_xmlchemy.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/unitdata/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/unitdata/dml.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/unitdata/shape.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/oxml/unitdata/text.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/parts/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/parts/test_chart.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/parts/test_coreprops.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/parts/test_embeddedpackage.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/parts/test_image.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/parts/test_media.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/parts/test_presentation.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/parts/test_slide.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_autoshape.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_base.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_connector.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_freeform.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_graphfrm.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_group.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_picture.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_placeholder.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/shapes/test_shapetree.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_action.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_alternative_text_roundtrip.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_api.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_background_authoring_roundtrip.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_character_formatting_roundtrip.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/calibriz.ttf +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/cdw-logo.eps +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/dummy.mp4 +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/minimal.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/minimal_slide.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/missing_rels_item.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/monty-truth.png +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/no-core-props.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/no-slides.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/presentation.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/python-icon.jpeg +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/python-powered.png +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/python.bmp +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/slideLayout1.xml +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-area.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x2-line.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/cat-labels.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/default-notes.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/default-theme.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/freeform.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/placeholders.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/relationships.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/snippets/timing.txt +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/test.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_files/test_slides.pptx +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_media.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_package.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_paragraph_formatting_roundtrip.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_presentation.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_shared.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_slide.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_slide_management_roundtrip.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_stacking_order_roundtrip.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_table.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_table_style_roundtrip.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_theme_authoring_roundtrip.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/test_util.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/text/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/text/test_fonts.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/text/test_layout.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/text/test_text.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/unitdata.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/unitutil/__init__.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/unitutil/cxml.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/unitutil/file.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tests/unitutil/mock.py +0 -0
- {ps_python_pptx-1.1.0 → ps_python_pptx-1.3.0}/tox.ini +0 -0
|
@@ -237,6 +237,29 @@ class Hyperlink(Subshape):
|
|
|
237
237
|
hlink = self._get_or_add_hlink()
|
|
238
238
|
hlink.rId = rId
|
|
239
239
|
|
|
240
|
+
@property
|
|
241
|
+
def screen_tip(self) -> str | None:
|
|
242
|
+
"""Text shown by PowerPoint when pointing at this hyperlink.
|
|
243
|
+
|
|
244
|
+
Assign the address or action before setting a ScreenTip. Assigning None
|
|
245
|
+
or an empty string removes the tip without changing the link. Setting
|
|
246
|
+
a new address uses the existing address setter behavior and clears the
|
|
247
|
+
old tip. Reading this property does not create a hyperlink element.
|
|
248
|
+
"""
|
|
249
|
+
hlink = self._hlink
|
|
250
|
+
return hlink.tooltip if hlink is not None else None
|
|
251
|
+
|
|
252
|
+
@screen_tip.setter
|
|
253
|
+
def screen_tip(self, value: str | None):
|
|
254
|
+
if value is not None and not isinstance(value, str):
|
|
255
|
+
raise TypeError("screen_tip must be a string or None")
|
|
256
|
+
hlink = self._hlink
|
|
257
|
+
if hlink is None:
|
|
258
|
+
if value:
|
|
259
|
+
raise ValueError("Set a hyperlink address or action before its ScreenTip")
|
|
260
|
+
return
|
|
261
|
+
hlink.tooltip = value or None
|
|
262
|
+
|
|
240
263
|
def _get_or_add_hlink(self) -> CT_Hyperlink:
|
|
241
264
|
"""Get the `a:hlinkClick` or `a:hlinkHover` element for the Hyperlink object.
|
|
242
265
|
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"""Read-only snapshots of slide background fills.
|
|
2
|
+
|
|
3
|
+
This models the background fill, not graphics drawn on a slide or master.
|
|
4
|
+
Unsupported fills are reported explicitly rather than changing the document.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import colorsys
|
|
10
|
+
from dataclasses import dataclass
|
|
11
|
+
|
|
12
|
+
from pptx.dml.color import RGBColor
|
|
13
|
+
from pptx.enum.dml import MSO_THEME_COLOR
|
|
14
|
+
from pptx.opc.constants import RELATIONSHIP_TYPE as RT
|
|
15
|
+
from pptx.oxml.ns import qn
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass(frozen=True)
|
|
19
|
+
class BackgroundInfo:
|
|
20
|
+
"""Resolved background data, independent of the source XML.
|
|
21
|
+
|
|
22
|
+
kind is solid, gradient, picture, none, or unknown. Gradient angles are
|
|
23
|
+
counter-clockwise degrees. Picture crop values are fractional insets in
|
|
24
|
+
left, top, right, bottom order. Only stretched picture fills are supported.
|
|
25
|
+
reason explains unsupported data. No getter creates or changes XML.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
kind: str
|
|
29
|
+
color: RGBColor | None = None
|
|
30
|
+
stops: tuple = ()
|
|
31
|
+
angle: float = 0.0
|
|
32
|
+
radial: bool = False
|
|
33
|
+
center: tuple = (0.5, 0.5)
|
|
34
|
+
image: bytes | None = None
|
|
35
|
+
crop: tuple = (0.0, 0.0, 0.0, 0.0)
|
|
36
|
+
reason: str | None = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def background_info(owner):
|
|
40
|
+
"""Resolve inheritance and theme background styles without modifying XML."""
|
|
41
|
+
chain = [owner]
|
|
42
|
+
if hasattr(owner, "slide_layout"):
|
|
43
|
+
chain.append(owner.slide_layout)
|
|
44
|
+
if hasattr(chain[-1], "slide_master"):
|
|
45
|
+
chain.append(chain[-1].slide_master)
|
|
46
|
+
master = chain[-1]
|
|
47
|
+
try:
|
|
48
|
+
if any(rel.reltype == RT.THEME_OVERRIDE for item in chain for rel in item.part.rels.values()):
|
|
49
|
+
raise ValueError("theme overrides are not supported")
|
|
50
|
+
theme = master.theme
|
|
51
|
+
color_map = {}
|
|
52
|
+
for item in reversed(chain):
|
|
53
|
+
mapping = item._element.find(qn("p:clrMap"))
|
|
54
|
+
override = item._element.find(qn("p:clrMapOvr"))
|
|
55
|
+
if override is not None:
|
|
56
|
+
mapping = override.find(qn("a:overrideClrMapping"))
|
|
57
|
+
if mapping is not None:
|
|
58
|
+
color_map.update(mapping.attrib)
|
|
59
|
+
for item in chain:
|
|
60
|
+
bg = item._element.cSld.find(qn("p:bg"))
|
|
61
|
+
if bg is None:
|
|
62
|
+
continue
|
|
63
|
+
explicit = bg.find(qn("p:bgPr"))
|
|
64
|
+
if explicit is not None:
|
|
65
|
+
return _fill_info(explicit, item.part, theme, color_map)
|
|
66
|
+
reference = bg.find(qn("p:bgRef"))
|
|
67
|
+
if reference is None:
|
|
68
|
+
raise ValueError("background has no fill or style reference")
|
|
69
|
+
index = int(reference.get("idx", "0"))
|
|
70
|
+
if index == 0:
|
|
71
|
+
return BackgroundInfo("none")
|
|
72
|
+
path = "a:themeElements/a:fmtScheme/" + (
|
|
73
|
+
"a:bgFillStyleLst" if index >= 1001 else "a:fillStyleLst"
|
|
74
|
+
)
|
|
75
|
+
styles = theme._element
|
|
76
|
+
for name in path.split("/"):
|
|
77
|
+
styles = styles.find(qn(name))
|
|
78
|
+
if styles is None:
|
|
79
|
+
raise ValueError("theme background style list is missing")
|
|
80
|
+
offset = index - 1001 if index >= 1001 else index - 1
|
|
81
|
+
if offset < 0 or offset >= len(styles):
|
|
82
|
+
raise ValueError("theme background style index is out of range")
|
|
83
|
+
placeholder = _color(reference, theme, color_map)
|
|
84
|
+
return _fill_info(
|
|
85
|
+
styles[offset], master.part.part_related_by(RT.THEME), theme, color_map, placeholder
|
|
86
|
+
)
|
|
87
|
+
return BackgroundInfo("solid", color=RGBColor(255, 255, 255))
|
|
88
|
+
except (ValueError, KeyError, AttributeError, TypeError) as exc:
|
|
89
|
+
return BackgroundInfo("unknown", reason=str(exc))
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _color(parent, theme, mapping, placeholder=None):
|
|
93
|
+
choices = {"srgbClr", "schemeClr", "sysClr"}
|
|
94
|
+
node = next((child for child in parent if child.tag.rsplit("}", 1)[-1] in choices), None)
|
|
95
|
+
if node is None:
|
|
96
|
+
raise ValueError("unsupported or missing background color")
|
|
97
|
+
kind = node.tag.rsplit("}", 1)[-1]
|
|
98
|
+
if kind == "srgbClr":
|
|
99
|
+
rgb = RGBColor.from_string(node.get("val"))
|
|
100
|
+
elif kind == "sysClr":
|
|
101
|
+
rgb = RGBColor.from_string(node.get("lastClr"))
|
|
102
|
+
else:
|
|
103
|
+
slot = node.get("val")
|
|
104
|
+
if slot == "phClr":
|
|
105
|
+
if placeholder is None:
|
|
106
|
+
raise ValueError("unresolved placeholder color")
|
|
107
|
+
rgb = placeholder
|
|
108
|
+
else:
|
|
109
|
+
slot = mapping.get(slot, slot)
|
|
110
|
+
rgb = theme.color_scheme[MSO_THEME_COLOR.from_xml(slot)]
|
|
111
|
+
channels = tuple(c / 255 for c in rgb)
|
|
112
|
+
for transform in node:
|
|
113
|
+
name = transform.tag.rsplit("}", 1)[-1]
|
|
114
|
+
value = int(transform.get("val", "0")) / 100000
|
|
115
|
+
if name == "alpha" and value == 1:
|
|
116
|
+
continue
|
|
117
|
+
if name in {"lumMod", "lumOff", "satMod"}:
|
|
118
|
+
h, light, saturation = colorsys.rgb_to_hls(*channels)
|
|
119
|
+
if name == "lumMod":
|
|
120
|
+
light *= value
|
|
121
|
+
elif name == "lumOff":
|
|
122
|
+
light += value
|
|
123
|
+
else:
|
|
124
|
+
saturation *= value
|
|
125
|
+
channels = colorsys.hls_to_rgb(h, max(0, min(1, light)), max(0, min(1, saturation)))
|
|
126
|
+
elif name == "tint":
|
|
127
|
+
channels = tuple(1 - (1 - c) * value for c in channels)
|
|
128
|
+
elif name == "shade":
|
|
129
|
+
channels = tuple(c * value for c in channels)
|
|
130
|
+
else:
|
|
131
|
+
raise ValueError("unsupported background color transform: " + name)
|
|
132
|
+
return RGBColor(*(round(max(0, min(1, c)) * 255) for c in channels))
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _fill_info(parent, part, theme, mapping, placeholder=None):
|
|
136
|
+
if any(parent.find(qn(name)) is not None for name in ("a:effectLst", "a:effectDag")):
|
|
137
|
+
effects = [parent.find(qn(name)) for name in ("a:effectLst", "a:effectDag")]
|
|
138
|
+
if any(effect is not None and len(effect) for effect in effects):
|
|
139
|
+
raise ValueError("background effects are not supported")
|
|
140
|
+
fills = {"solidFill", "gradFill", "blipFill", "noFill"}
|
|
141
|
+
tag = parent.tag.rsplit("}", 1)[-1]
|
|
142
|
+
node = (
|
|
143
|
+
parent
|
|
144
|
+
if tag in fills
|
|
145
|
+
else next((child for child in parent if child.tag.rsplit("}", 1)[-1] in fills), None)
|
|
146
|
+
)
|
|
147
|
+
if node is None:
|
|
148
|
+
raise ValueError("unsupported background fill")
|
|
149
|
+
kind = node.tag.rsplit("}", 1)[-1]
|
|
150
|
+
if kind == "noFill":
|
|
151
|
+
return BackgroundInfo("none")
|
|
152
|
+
if kind == "solidFill":
|
|
153
|
+
return BackgroundInfo("solid", color=_color(node, theme, mapping, placeholder))
|
|
154
|
+
if kind == "blipFill":
|
|
155
|
+
if node.find(qn("a:tile")) is not None:
|
|
156
|
+
raise ValueError("tiled background pictures are not supported")
|
|
157
|
+
stretch = node.find(qn("a:stretch"))
|
|
158
|
+
if stretch is None:
|
|
159
|
+
raise ValueError("background picture has no stretch geometry")
|
|
160
|
+
rect = stretch.find(qn("a:fillRect"))
|
|
161
|
+
if rect is not None and any(int(rect.get(k, "0")) for k in ("l", "t", "r", "b")):
|
|
162
|
+
raise ValueError("inset picture fills are not supported")
|
|
163
|
+
blip = node.find(qn("a:blip"))
|
|
164
|
+
if blip is None or len(blip):
|
|
165
|
+
raise ValueError("missing background picture or unsupported picture effects")
|
|
166
|
+
image = part.related_part(blip.get(qn("r:embed"))).blob
|
|
167
|
+
rect = node.find(qn("a:srcRect"))
|
|
168
|
+
crop = (
|
|
169
|
+
tuple(int(rect.get(k, "0")) / 100000 for k in ("l", "t", "r", "b"))
|
|
170
|
+
if rect is not None
|
|
171
|
+
else (0.0, 0.0, 0.0, 0.0)
|
|
172
|
+
)
|
|
173
|
+
return BackgroundInfo("picture", image=image, crop=crop)
|
|
174
|
+
stop_list = node.find(qn("a:gsLst"))
|
|
175
|
+
if stop_list is None or len(stop_list) < 2:
|
|
176
|
+
raise ValueError("background gradient needs at least two stops")
|
|
177
|
+
stops = tuple(
|
|
178
|
+
(int(s.get("pos")) / 100000, _color(s, theme, mapping, placeholder)) for s in stop_list
|
|
179
|
+
)
|
|
180
|
+
linear = node.find(qn("a:lin"))
|
|
181
|
+
if linear is not None:
|
|
182
|
+
if linear.get("scaled", "0") not in {"0", "false"}:
|
|
183
|
+
raise ValueError("scaled gradient geometry is not supported")
|
|
184
|
+
return BackgroundInfo(
|
|
185
|
+
"gradient", stops=stops, angle=(-int(linear.get("ang", "0")) / 60000) % 360
|
|
186
|
+
)
|
|
187
|
+
path = node.find(qn("a:path"))
|
|
188
|
+
if path is None or path.get("path") != "circle":
|
|
189
|
+
raise ValueError("unsupported gradient path")
|
|
190
|
+
rect = path.find(qn("a:fillToRect"))
|
|
191
|
+
values = (
|
|
192
|
+
tuple(int(rect.get(k, "0")) / 100000 for k in ("l", "t", "r", "b"))
|
|
193
|
+
if rect is not None
|
|
194
|
+
else (0.0, 0.0, 0.0, 0.0)
|
|
195
|
+
)
|
|
196
|
+
if abs(values[0] + values[2] - 1) > 0.00001 or abs(values[1] + values[3] - 1) > 0.00001:
|
|
197
|
+
raise ValueError("radial gradient focal region must be a point")
|
|
198
|
+
return BackgroundInfo("gradient", stops=stops, radial=True, center=values[:2])
|
|
@@ -14,6 +14,8 @@ class CT_Hyperlink(BaseOxmlElement):
|
|
|
14
14
|
"action", XsdString
|
|
15
15
|
)
|
|
16
16
|
|
|
17
|
+
tooltip: str | None = OptionalAttribute("tooltip", XsdString) # pyright: ignore[reportAssignmentType]
|
|
18
|
+
|
|
17
19
|
@property
|
|
18
20
|
def action_fields(self) -> dict[str, str]:
|
|
19
21
|
"""Query portion of the `ppaction://` URL as dict.
|
|
@@ -56,6 +56,13 @@ class _BaseSlide(PartElementProxy):
|
|
|
56
56
|
"""
|
|
57
57
|
return _Background(self._element.cSld)
|
|
58
58
|
|
|
59
|
+
@property
|
|
60
|
+
def background_info(self):
|
|
61
|
+
"""Read-only effective background fill snapshot, including inherited styles."""
|
|
62
|
+
from pptx.background import background_info
|
|
63
|
+
|
|
64
|
+
return background_info(self)
|
|
65
|
+
|
|
59
66
|
def set_background_picture(self, image_file) -> None:
|
|
60
67
|
"""Use an image path or file-like object as a stretched slide background.
|
|
61
68
|
|
|
@@ -488,6 +488,29 @@ class _Hyperlink(Subshape):
|
|
|
488
488
|
if url:
|
|
489
489
|
self._add_hlinkClick(url)
|
|
490
490
|
|
|
491
|
+
@property
|
|
492
|
+
def screen_tip(self) -> str | None:
|
|
493
|
+
"""Text shown by PowerPoint when pointing at this hyperlink.
|
|
494
|
+
|
|
495
|
+
Assign the address or action before setting a ScreenTip. Assigning None
|
|
496
|
+
or an empty string removes the tip without changing the link. Setting
|
|
497
|
+
a new address uses the existing address setter behavior and clears the
|
|
498
|
+
old tip. Reading this property does not create a hyperlink element.
|
|
499
|
+
"""
|
|
500
|
+
hlink = self._hlinkClick
|
|
501
|
+
return hlink.tooltip if hlink is not None else None
|
|
502
|
+
|
|
503
|
+
@screen_tip.setter
|
|
504
|
+
def screen_tip(self, value: str | None):
|
|
505
|
+
if value is not None and not isinstance(value, str):
|
|
506
|
+
raise TypeError("screen_tip must be a string or None")
|
|
507
|
+
hlink = self._hlinkClick
|
|
508
|
+
if hlink is None:
|
|
509
|
+
if value:
|
|
510
|
+
raise ValueError("Set a hyperlink address or action before its ScreenTip")
|
|
511
|
+
return
|
|
512
|
+
hlink.tooltip = value or None
|
|
513
|
+
|
|
491
514
|
def _add_hlinkClick(self, url: str):
|
|
492
515
|
rId = self.part.relate_to(url, RT.HYPERLINK, is_external=True)
|
|
493
516
|
self._rPr.add_hlinkClick(rId)
|
|
@@ -204,6 +204,7 @@ features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml
|
|
|
204
204
|
src/pptx/__init__.py
|
|
205
205
|
src/pptx/action.py
|
|
206
206
|
src/pptx/api.py
|
|
207
|
+
src/pptx/background.py
|
|
207
208
|
src/pptx/exc.py
|
|
208
209
|
src/pptx/media.py
|
|
209
210
|
src/pptx/package.py
|
|
@@ -324,11 +325,13 @@ tests/test_action.py
|
|
|
324
325
|
tests/test_alternative_text_roundtrip.py
|
|
325
326
|
tests/test_api.py
|
|
326
327
|
tests/test_background_authoring_roundtrip.py
|
|
328
|
+
tests/test_background_info.py
|
|
327
329
|
tests/test_character_formatting_roundtrip.py
|
|
328
330
|
tests/test_media.py
|
|
329
331
|
tests/test_package.py
|
|
330
332
|
tests/test_paragraph_formatting_roundtrip.py
|
|
331
333
|
tests/test_presentation.py
|
|
334
|
+
tests/test_screen_tips.py
|
|
332
335
|
tests/test_shared.py
|
|
333
336
|
tests/test_slide.py
|
|
334
337
|
tests/test_slide_management_roundtrip.py
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Round-trip checks for the read-only background snapshot API."""
|
|
2
|
+
|
|
3
|
+
import io
|
|
4
|
+
|
|
5
|
+
from PIL import Image
|
|
6
|
+
from pptx import Presentation
|
|
7
|
+
from pptx.dml.color import RGBColor
|
|
8
|
+
from pptx.enum.dml import MSO_THEME_COLOR
|
|
9
|
+
from pptx.oxml.xmlchemy import OxmlElement
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_inherited_default_background_does_not_change_xml():
|
|
13
|
+
prs = Presentation()
|
|
14
|
+
slide = prs.slides.add_slide(prs.slide_layouts[1])
|
|
15
|
+
before = (slide._element.xml, slide.slide_layout._element.xml, prs.slide_master._element.xml)
|
|
16
|
+
info = slide.background_info
|
|
17
|
+
assert info.kind == "solid"
|
|
18
|
+
assert info.color == RGBColor(255, 255, 255)
|
|
19
|
+
assert before == (
|
|
20
|
+
slide._element.xml,
|
|
21
|
+
slide.slide_layout._element.xml,
|
|
22
|
+
prs.slide_master._element.xml,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_layout_and_slide_overrides_resolve_theme_colors():
|
|
27
|
+
prs = Presentation()
|
|
28
|
+
layout = prs.slide_layouts[1]
|
|
29
|
+
layout.background.fill.solid()
|
|
30
|
+
layout.background.fill.fore_color.theme_color = MSO_THEME_COLOR.ACCENT_1
|
|
31
|
+
prs.slide_master.theme.color_scheme[MSO_THEME_COLOR.ACCENT_1] = RGBColor(20, 50, 80)
|
|
32
|
+
slide = prs.slides.add_slide(layout)
|
|
33
|
+
assert slide.background_info.color == RGBColor(20, 50, 80)
|
|
34
|
+
slide.background.fill.solid()
|
|
35
|
+
slide.background.fill.fore_color.rgb = RGBColor(40, 50, 60)
|
|
36
|
+
assert slide.background_info.color == RGBColor(40, 50, 60)
|
|
37
|
+
target = io.BytesIO()
|
|
38
|
+
prs.save(target)
|
|
39
|
+
assert Presentation(target).slides[0].background_info.color == RGBColor(40, 50, 60)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_gradient_snapshot_includes_geometry_and_resolved_stops():
|
|
43
|
+
prs = Presentation()
|
|
44
|
+
slide = prs.slides.add_slide(prs.slide_layouts[1])
|
|
45
|
+
stops = [(0, RGBColor(0, 0, 0)), (1, RGBColor(255, 255, 255))]
|
|
46
|
+
slide.background.fill.set_gradient(stops, angle=135)
|
|
47
|
+
info = slide.background_info
|
|
48
|
+
assert info.kind == "gradient"
|
|
49
|
+
assert info.stops == tuple(stops)
|
|
50
|
+
assert info.angle == 135
|
|
51
|
+
assert not info.radial
|
|
52
|
+
slide.background.fill.set_gradient(stops, radial=True, center=(0.25, 0.75))
|
|
53
|
+
info = slide.background_info
|
|
54
|
+
assert info.radial and info.center == (0.25, 0.75)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_picture_snapshot_returns_embedded_bytes():
|
|
58
|
+
image = io.BytesIO()
|
|
59
|
+
Image.new("RGB", (20, 10), "blue").save(image, format="PNG")
|
|
60
|
+
prs = Presentation()
|
|
61
|
+
prs.slide_master.set_background_picture(image)
|
|
62
|
+
slide = prs.slides.add_slide(prs.slide_layouts[1])
|
|
63
|
+
before = slide._element.xml
|
|
64
|
+
info = slide.background_info
|
|
65
|
+
assert info.kind == "picture"
|
|
66
|
+
assert info.image == image.getvalue()
|
|
67
|
+
assert before == slide._element.xml
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_unsupported_fill_is_reported_without_mutation():
|
|
71
|
+
prs = Presentation()
|
|
72
|
+
slide = prs.slides.add_slide(prs.slide_layouts[1])
|
|
73
|
+
slide.background.fill.patterned()
|
|
74
|
+
before = slide._element.xml
|
|
75
|
+
assert slide.background_info.kind == "unknown"
|
|
76
|
+
assert "unsupported" in slide.background_info.reason
|
|
77
|
+
assert before == slide._element.xml
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_brightness_transforms_are_resolved():
|
|
81
|
+
prs = Presentation()
|
|
82
|
+
slide = prs.slides.add_slide(prs.slide_layouts[1])
|
|
83
|
+
slide.background.fill.solid()
|
|
84
|
+
color = slide.background.fill.fore_color
|
|
85
|
+
color.rgb = RGBColor(255, 255, 255)
|
|
86
|
+
color.brightness = -0.5
|
|
87
|
+
assert slide.background_info.color == RGBColor(128, 128, 128)
|
|
88
|
+
alpha = OxmlElement("a:alpha")
|
|
89
|
+
alpha.set("val", "50000")
|
|
90
|
+
color._color._xClr.append(alpha)
|
|
91
|
+
assert slide.background_info.kind == "unknown"
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""ScreenTips on text, shape click, and shape hover hyperlinks."""
|
|
2
|
+
|
|
3
|
+
import io
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
from pptx import Presentation
|
|
7
|
+
from pptx.action import ActionSetting
|
|
8
|
+
from pptx.enum.shapes import MSO_SHAPE
|
|
9
|
+
from pptx.util import Inches
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def link(prs, kind):
|
|
13
|
+
slide = prs.slides.add_slide(prs.slide_layouts[6])
|
|
14
|
+
shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, Inches(2), Inches(1))
|
|
15
|
+
if kind == "text":
|
|
16
|
+
run = shape.text_frame.paragraphs[0].add_run()
|
|
17
|
+
run.text = "Documentation"
|
|
18
|
+
return run.hyperlink
|
|
19
|
+
return (
|
|
20
|
+
shape.click_action
|
|
21
|
+
if kind == "click"
|
|
22
|
+
else ActionSetting(shape._element._nvXxPr.cNvPr, shape, hover=True)
|
|
23
|
+
).hyperlink
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@pytest.mark.parametrize("kind", ["text", "click", "hover"])
|
|
27
|
+
def test_screen_tip_round_trip_and_clear(kind):
|
|
28
|
+
prs = Presentation()
|
|
29
|
+
hyperlink = link(prs, kind)
|
|
30
|
+
hyperlink.address = "https://example.com"
|
|
31
|
+
hyperlink.screen_tip = 'Guide <&> "notes" café'
|
|
32
|
+
output = io.BytesIO()
|
|
33
|
+
prs.save(output)
|
|
34
|
+
shape = Presentation(output).slides[0].shapes[0]
|
|
35
|
+
restored = (
|
|
36
|
+
shape.text_frame.paragraphs[0].runs[0].hyperlink
|
|
37
|
+
if kind == "text"
|
|
38
|
+
else (
|
|
39
|
+
shape.click_action
|
|
40
|
+
if kind == "click"
|
|
41
|
+
else ActionSetting(shape._element._nvXxPr.cNvPr, shape, hover=True)
|
|
42
|
+
).hyperlink
|
|
43
|
+
)
|
|
44
|
+
assert restored.screen_tip == 'Guide <&> "notes" café'
|
|
45
|
+
assert restored.address == "https://example.com"
|
|
46
|
+
restored.screen_tip = ""
|
|
47
|
+
assert restored.screen_tip is None
|
|
48
|
+
assert restored.address == "https://example.com"
|
|
49
|
+
restored.screen_tip = "Again"
|
|
50
|
+
restored.screen_tip = None
|
|
51
|
+
assert restored.address == "https://example.com"
|
|
52
|
+
assert restored.screen_tip is None
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@pytest.mark.parametrize("kind", ["text", "click", "hover"])
|
|
56
|
+
def test_missing_link_is_not_created_by_screen_tip_access(kind):
|
|
57
|
+
prs = Presentation()
|
|
58
|
+
hyperlink = link(prs, kind)
|
|
59
|
+
slide = prs.slides[0]
|
|
60
|
+
before = slide._element.xml
|
|
61
|
+
assert hyperlink.screen_tip is None
|
|
62
|
+
hyperlink.screen_tip = None
|
|
63
|
+
hyperlink.screen_tip = ""
|
|
64
|
+
with pytest.raises(ValueError):
|
|
65
|
+
hyperlink.screen_tip = "No target"
|
|
66
|
+
with pytest.raises(TypeError):
|
|
67
|
+
hyperlink.screen_tip = 123
|
|
68
|
+
assert before == slide._element.xml
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@pytest.mark.parametrize("kind", ["text", "click", "hover"])
|
|
72
|
+
def test_address_removal_clears_tip(kind):
|
|
73
|
+
prs = Presentation()
|
|
74
|
+
hyperlink = link(prs, kind)
|
|
75
|
+
hyperlink.address = "https://example.com"
|
|
76
|
+
hyperlink.screen_tip = "Old target"
|
|
77
|
+
hyperlink.address = "https://example.org"
|
|
78
|
+
assert hyperlink.screen_tip is None
|
|
79
|
+
hyperlink.screen_tip = "New target"
|
|
80
|
+
hyperlink.address = None
|
|
81
|
+
assert hyperlink.screen_tip is None
|
|
82
|
+
assert hyperlink.address is None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|